我有一小段代码,我在其中检查字符的代码点Ü。
Locale lc = Locale.getDefault();
System.out.println(lc.toString());
System.out.println(Charset.defaultCharset());
System.out.println(System.getProperty("file.encoding"));
String inUnicode = "\u00dc";
String glyph = "Ü";
System.out.println("inUnicode " + inUnicode + " code point " + inUnicode.codePointAt(0));
System.out.println("glyph " + glyph + " code point " + glyph.codePointAt(0));
当我在 MacOS x 和 Windows 10 上运行此代码时,我获得了不同的代码点值,请参阅下面的输出。
MacOS 上的输出
en_US
UTF-8
UTF-8
inUnicode Ü code point 220
glyph Ü code point 220
Windows 上的输出
en_US
windows-1252
Cp1252
in unicode Ü code point 220
glyph ?? code point 195
我在https://en.wikipedia.org/wiki/Windows-1252#Character_set检查了 windows-1252 的代码页,这里的代码点Ü是220. 对于String glyph = "Ü";为什么会出现代码点为195在Windows?根据我的理解,glyph应该已经正确呈现,并且代码点应该是220因为它是在 Windows-1252 中定义的。
如果我替换String glyph = "Ü";为String glyph = new String("Ü".getBytes(), Charset.forName("UTF-8"));然后glyph正确呈现并且代码点值为220. 无论语言环境和字符集如何,这是在任何操作系统上标准化 String 行为的正确有效方法吗?
狐的传说
相关分类