更优雅的方式在输入流中解码\ u0000 Unicode

时间:2010-07-09 04:49:01

标签: android unicode

我正在解析来自Facebook的输入流。我正在使用像

这样的东西
BufferedReader in =
    new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));

然后in.readLine实际从流中读取。

流似乎已经用ASCII编码的Unicode字符,所以我看到像\ u00e4(其中\ u实际上是两个离散的ASCII字符)之类的东西。现在,我正在捕获“\ u”并解码后续的两个十六进制字节,将它们转换为char并用它们替换字符串,这显然是最糟糕的方法。

我确信在读取流时使用本机函数解码特殊字符有一种很酷的方式(我希望它可以在InputStreamReader层上完成)。但是如何?

2 个答案:

答案 0 :(得分:5)

数据格式是JSON,我没有提及(以及Thanatos已经假设的)。使用Android的JSON解析器将自动正确解码字符。在几个层面上解析JSON本身显然是一个愚蠢的想法。

答案 1 :(得分:2)

如果您看到“\u00e4”与“\”和“u”分开,那么“0”,“0 ','e'和'4'可能构成2字节(16位)Unicode字符的4个十六进制数字。符号基于C99;替代方案是'\U00XXYYZZ',其中有8个十六进制数字表示32位UTF-32字符(但是,因为Unicode是21位代码集,所以8位数中的前2位始终为0,并且下一个通常(通常)也是0。

但是,这并没有回答你关于什么是正确的Android方式来阅读数据的问题,而你可能有一个。