代码之家  ›  专栏  ›  技术社区  ›  EboMike

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

  •  3
  • EboMike  · 技术社区  · 14 年前

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

    BufferedReader in =
        new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
    

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

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

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

    2 回复  |  直到 14 年前
        1
  •  5
  •   EboMike    14 年前

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

        2
  •  2
  •   Jonathan Leffler vy32    14 年前

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

    然而,这并不能回答你关于什么是正确的Android方式来读取数据的问题,你说的对,可能有一个。