繁体   English   中英

Java在带有补充Unicode字符的字符流中读取

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM