我正在解析来自Facebook的输入流。我正在使用像
这样的东西BufferedReader in =
new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
然后in.readLine
实际从流中读取。
流似乎已经用ASCII编码的Unicode字符,所以我看到像\ u00e4(其中\ u实际上是两个离散的ASCII字符)之类的东西。现在,我正在捕获“\ u”并解码后续的两个十六进制字节,将它们转换为char并用它们替换字符串,这显然是最糟糕的方法。
我确信在读取流时使用本机函数解码特殊字符有一种很酷的方式(我希望它可以在InputStreamReader层上完成)。但是如何?
答案 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方式来阅读数据的问题,而你可能有一个。