Я работал с java.util.prefs.Preferences функциональностью (в Java 8, на машине Windows). И он работает, где я могу писать новые ключи в реестр Windows. Поэтому я использую Preferences.systemRoot(), чтобы получить объект Preferences для системы, а затем использовать метод node(), чтобы получить объект Preferences, который сопоставляется с node в реестре Windows. И это прекрасно создает вещи.
Ключ, который я использую для node, является строкой всех заглавных букв ( "RBI" ). Когда я смотрю на node в реестре Windows, он появляется как "/R/B/I", с косой чертой в имени.
Я думал, что это странно, поэтому я немного вырыл. И похоже, что это намеренно. Я нашел класс, который обеспечивает реализацию Preferences в среде Windows (java.util.prefs.WindowsPreferences), и этот метод используется для создания значений, отправленных в реестр Windows, является статическим методом для WindowsName. В JavaDoc для этого....
/** * Converts value or node 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. */
Таким образом, простая кодировка будет содержать заглавные буквы, добавить косую черту.
Кто-нибудь знает, почему это требуется? Я думал, что реестр может обрабатывать чувствительные к регистру значения, но это, похоже, указывает на то, что он не может?
Я могу обойти это, мне просто интересно, почему это было сделано.