【问题标题】:android uft-8 character conversion to symbols [duplicate]android uft-8字符转换为符号[重复]
【发布时间】:2014-01-15 19:35:38
【问题描述】:

在我的 android 应用程序中,我的服务器返回一个像这样的 UTF-8 编码响应; \u00e2\u0080\u0098 rank \u00e2\u0080\u0099 相当于 'rank'。请帮助我将此 Unicode 字符转换为相应的符号 即

1.\u00e2\u0080\u0098 -> '(左单引号)

2.\u00e2\u0080\u0099 -> '(右单引号)

【问题讨论】:

  • 我试过下面的代码 String str = StringEscapeUtils.unescapeJava(str);
  • 我不认为你的意思是\u00e2\u0080\u0098。我希望您的意思是字节 0xe2、0x80、0x98... 但您的问题还不清楚。您没有显示任何代码并没有帮助 - 我们不知道您是如何从服务器读取数据的。
  • @GareginSargsyan 我尝试了同样的方法,但它不起作用。我将 lang.jar 添加到我的构建路径并尝试了它,但它对我没有帮助。我将来自服务器的响应保存在字符串 (str) 中,然后调用 str = StringEscapeUtils.unescapeJava(str);但它没有解码它。
  • @Jon Skeet 我从服务器收到 JSON 响应,并在日志中打印了相同的内容,它显示 \u00e2\u0080\u0098。
  • @NaveenPrabhu:这对我来说似乎很糟糕。 U+0098 是“字符串的开头”,U+0080 是控制字符。这是你的服务器吗?如果是这样,我会从那里开始并尝试先解决这个问题......

标签: java android unicode unicode-string unicode-escapes


【解决方案1】:

就是这样,用你的字符串替换“some text” -

   String s1 = "some text";
        String s2 = "";
        byte[] bytes;
        try {
            bytes = s1.getBytes("UTF-8");
             s2 = new String(bytes, "UTF-8"); // Charset with which bytes were encoded
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

s2 有所需的字符串。

【讨论】:

  • 您正在使用 UTF-8 将字符串编码为字节,然后使用完全相同的编码将字节解码回字符串。这段代码根本没有任何作用。
猜你喜欢
  • 2016-10-14
  • 2019-05-29
  • 1970-01-01
  • 2016-04-12
  • 2013-08-09
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 2015-01-03
相关资源
最近更新 更多