Tôi đã làm việc với chức năng java.util.prefs.Preferences (trong Java 8, trên máy Windows). Và nó hoạt động, nơi tôi có thể viết các khóa mới cho Windows Registry. Vì vậy, tôi sử dụng Preferences.systemRoot() để lấy đối tượng Preferences cho hệ thống, và sau đó sử dụng phương thức node() để lấy một đối tượng Preferences ánh xạ tới một nút trong Windows Registry. Và nó tạo ra những điều tốt đẹp.Trong Java, tại sao WindowsPreferences sử dụng dấu gạch chéo cho chữ hoa?
Khoá tôi đang sử dụng cho nút là một chuỗi trong tất cả các chữ cái viết hoa ("RBI"). Khi tôi nhìn vào nút trong Windows Registry, nó xuất hiện dưới dạng "/ R/B/I", với dấu gạch chéo ở phía trước trong tên.
Tôi nghĩ điều này thật kỳ quặc, vì vậy tôi đã đào xới một chút Và có vẻ như đây là chủ ý. Tôi đã tìm thấy lớp cung cấp việc triển khai Preferences trên môi trường Windows (java.util.prefs.WindowsPreferences) và phương thức được sử dụng để xây dựng các giá trị được gửi tới cửa sổ đăng ký là một phương thức tĩnh toWindowsName. Trong javadoc cho rằng ....
/** * Converts value's or node's name to its Windows representation * as a byte-encoded string. * Two encodings, simple and altBase64 are used. * <p> * <i>Simple</i> encoding is used, if java string does not contain * any characters less, than 0x0020, or greater, than 0x007f. * Simple encoding adds "/" character to capital letters, i.e. * "A" is encoded as "/A". Character '\' is encoded as '//', * '/' is encoded as '\'. * The constructed string is converted to byte array by truncating the * highest byte and adding the terminating <tt>null</tt> character. * <p> * <i>altBase64</i> encoding is used, if java string does contain at least * one character less, than 0x0020, or greater, than 0x007f. * This encoding is marked by setting first two bytes of the * Windows string to '/!'. The java name is then encoded using * byteArrayToAltBase64() method from * Base64 class. */
Vì vậy, các mã hóa đơn giản sẽ, đối với chữ in hoa, thêm một dấu gạch chéo.
Có ai biết tại sao điều này là bắt buộc không? Tôi đã nghĩ rằng Registry có thể xử lý các giá trị phân biệt chữ hoa chữ thường, nhưng điều này dường như chỉ ra rằng nó không thể?
Tôi có thể giải quyết vấn đề này, tôi chỉ tò mò tại sao điều này được thực hiện.
Có vẻ như họ đang cố gắng làm cho lược đồ đặt tên phân biệt chữ hoa chữ thường. –
Đồng ý, nhưng bằng cách sử dụng RegEdit tôi có thể nhập trường hợp chuỗi nhạy cảm (có rất nhiều người trong số họ đã có). Và sử dụng các công cụ khác mà tùy chọn đã có. Có lẽ nó là một số cách giải quyết với các cuộc gọi vào các phương pháp bản địa cuối cùng đang được sử dụng. – EdH
Dường như mã hóa chuỗi là một mảng byte. Mà là tốt. Bây giờ, lý do duy nhất tôi có thể nghĩ đến (bốn từ cuối cùng là chìa khóa) làm việc này sẽ là nếu bạn không có các giá trị byte khác nhau cho chữ thường và chữ thường. Nhưng, một lần nữa, theo như tôi biết, chữ thường và chữ hoa có giá trị byte khác nhau. Vì vậy, nó không thực sự cần thiết? Tôi phải thiếu một cái gì đó – EdH