UTF-16对于增补字符是32字节的,如果是32位时,它是如何排列的。
而我们的char是16位的。
那对于增补字符,我们的char如何来表现?
[b]问题补充:[/b]
各位兄台,可否也回答一下本楼主的问题,呵呵。
[quote="jerry"][b]问题补充:[/b]
各位兄台,可否也回答一下本楼主的问题,呵呵。[/quote]
我以为一楼的回复已经足够了……
Java里char是没办法表示增补字符的,就这么简单。Java 5.0开始char对应的是UTF-16的code unit而不是Unicode code point。在U+0000到U+FFFF范围内一个UTF-16 code unit就是一个Unicode code point,但在这个范围之上的则需要用两个UTF-16 code unit来表示。在Java中要表现增补字符要用String。
参考这里吧,[url=http://java.sun.com/mailers/techtips/corejava/2006/tt0822.html]Strings - Core Java Technologies Technical Tips[/url]
Java从5.0开始,一个char是一个UTF-16字符单元(而不一定是一个Unicode codepoint)。要表示Unicode的增补字符时,Java/UTF-16采用的是surrogate pair的办法,用两个字符单元表示一个Unicode codepoint,包括一个高位值和一个低位值。
正好我也想问问:
Java正则表达式如何对待增补字符?当1个还是2个?
另外windows的字符是UCS-2还是UTF-16?大头还是小头?
Windows内部使用的字符集是UTF-16LE。Windows API里带有W后缀的就是;带有A后缀的则根据当前locale转换到Unicode之后调用W版的API。
Sun JDK里的java.util.regex是按完整的Unicode code point来匹配的。可惜《精通正则表达式》那本书现在没在手边,忘了有没有什么特别情况要注意了。[url=http://java.sun.com/developer/technicalArticles/Intl/Supplementary/]这篇04年的文档[/url]说:
[quote]The java.util.regex package has been updated so that both pattern strings and target strings can contain supplementary characters, which will be handled as complete units.[/quote]