我在Java的内部表示中搜索了String,但我有两种看起来可靠但不一致的材料.
一个是:
http://www.codeguru.com/cpp/misc/misc/multi-lingualsupport/article.php/c10451
它说:
Java使用UTF-16作为内部文本表示,并支持对字符串序列化进行非标准的UTF-8修改.
另一个是:
它说:
Tcl也使用与Java相同的修改后的UTF-8 [25]来表示Unicode数据,但对外部数据使用严格的CESU-8.
修改过的UTF-8?还是UTF-16?哪一个是正确的?Java在内存中使用了多少字节?
请让我知道哪一个是正确的以及它使用了多少字节.
public class UTF8 {
public static void main(String[] args){
String s = "?"; //0xFF6E
System.out.println(s.getBytes().length);//length of the string
System.out.println(s.charAt(0));//first character in the string
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
3
?
Run Code Online (Sandbox Code Playgroud)
请帮我理解这个.试图了解utf8编码在java中的工作原理.根据char char的 java doc定义 :char数据类型是一个16位Unicode字符.
这是否意味着java中的char类型只能支持那些可以用2个字节而不是更多的字节表示的unicode字符?
在上面的程序中,为该字符串分配的字节数为3,但在第三行中返回第一个字符(java中为2个字节)可以容纳3个字节长的字符?这里真的很困惑?
关于这个概念在java/general中的任何好的参考将非常感激.