[英]Java reading in character streams with supplementary unicode characters
我在使用Java读取补充unicode字符时遇到问题。 我有一个文件,该文件可能包含补充集中的字符(大于\\ uFFFF的任何字符)。 当我将InputStreamReader设置为使用UTF-8读取文件时,我希望read()方法为每个补充字符返回一个字符,相反,它似乎在16位阈值上分裂。
我看到了一些其他有关基本unicode字符流的问题,但似乎无法解决大于16位的情况。
这是一些简化的示例代码:
InputStreamReader input = new InputStreamReader(file, "UTF8");
int nextChar = input.read();
while(nextChar != -1) {
...
nextChar = input.read();
}
有谁知道我需要做什么才能正确读取包含补充字符的UTF-8编码文件?
Java与UTF-16一起使用 。 因此,如果您的输入流具有星体字符,则它们将显示为代理对,即两个char
。 第一个字符是高代理,第二个字符是低代理。
尽管read()
被定义为返回int
,并且理论上可以“一次全部”返回一个补充字符的代码点,但我相信return类型只是int
允许返回值-1。
您取得值read()
基本上是一个char
的另一个名称,和Java一个char
被限制在16位。
Java只能将补充字符表示为UTF-16代理对,一旦就Java而言,一旦超过0xFFFF,就不会出现“单个字符”(至少在char
意义上)之类的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.