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

Android 在输入流中解码\u0000 Unicode的更优雅的方法,android,unicode,Android,Unicode,我正在解析来自Facebook的输入流。我用的是 BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8")); 然后在.readLine中执行以实际读取流 流似乎已经用ASCII编码了Unicode字符,所以我看到了类似于\u00e4的东西(其中\u实际上是两个离散的ASCII字符)。现在,我正在搜索“\u”并对随后的两个十六进制字节进行解码,将它们转换为一个字符并用它

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

BufferedReader in =
    new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
然后在.readLine中执行
以实际读取流

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


我相信有一种很酷的方法可以在读取流时使用本机函数解码特殊字符(我希望可以在InputStreamReader层上完成)。但是怎么做呢?

如果你看到“
\u00e4
”与“
\
”分开,那么“
0
”、“
0
”、“
e
”和“
4
”可能构成了2字节(16位)Unicode字符的4个十六进制数字。该符号基于C99;另一种选择是“
\u00xxyyz
”,其中有8个十六进制数字表示32位UTF-32字符(但是,由于Unicode是一个21位的代码集,8个数字中的前2个总是0,下一个通常也是0)


但是,这并不能回答您关于Android读取数据的正确方式的问题,您是对的,可能有一种方式。

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

您正在解析什么URL,以便我们可以查看/验证您的输入?这是JSON吗?这是Facebook愚蠢的新系统,带有图形API。看起来是这样的:{“data”:[{“name”:“Thanatos”,“id”:“1234”},{“name”:“Max\u00e4”,“id”:“5678”}]}@Thanatos:是的,顺便说一句。JSON的解析器正确地处理了它。我糟透了。是的,它基本上是6个字节(考虑到它在一个字符串中,物理上是12个字节,所以每个字符是2个字节)。我的方法很好用——我把它读作16位的值,然后用它作为字符。但由于我在Java中执行此操作,并在执行时替换字符串,因此会产生大量JVM和内存管理开销。在解析时以本机方式执行此操作将大大加快速度。