【问题标题】:Java unicode strange behaviourJava unicode 奇怪的行为
【发布时间】:2021-09-28 18:28:32
【问题描述】:

我正在使用 HttpURLConnection 向 twitter 的 API 发出请求。 API 返回一个 json,其中包含所有使用 UTF-8 编码的数据(您可以在响应的标头中看到)。我在 .jsp (html) 中显示数据。

我用这段代码读取了响应(json):

BufferedReader in = new BufferedReader(new InputStreamReader(http.getInputStream(),"UTF-8"));
String inputLine;
StringBuffer res = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    // Append line to 'res', so I can have a string with all the json
    res.append(inputLine);
    // Print the line for debugging
    System.out.println(inputLine);
}
in.close();

现在,问题来了。 json 中的一些值(现在只是一个字符串)是表情符号,因此它们应该表示为 unicode 字符。这正是发生的事情,至少其中一些是这样。这是一个带有用户名的示例:

推特原文:

我从 API 的响应中得到的信息:

"name":"\uD83C\uDF52UserName"

.jsp中最终如何显示:

这个表情符号很好用。该名称显示为在 twitter 中显示。但请看以下推文的文字。就好像 unicode 被复制但第二个没有显示,或者有些奇怪。请注意,在 Eclipse 的控制台中,您会看到 ??,但是当它加载 .jsp 时,表情符号会按应有的方式显示。这不是问题,我猜这只是控制台的编码(尽管这表明该 unicode 有问题,因为在第一个示例中它显示的是 unicode,而不是 ??)。

原始推特推文:

我从 API 的响应中得到的信息:

"text":"?? Segons l'US Department of Justice, els infants que es crien sense pare són:\n\n?? 63% de suïcidis.\n?? 90% d'indigents.\n ?? 85% de desordres en el conportament。\n?? 71% de l'abandonament escolar。\n?? 70% de les detencions juvenils。\n?? 75% d'abús de drogues。\n?? 75 % dels violadors。”}

.jsp中最终如何显示:

表情符号显示正确,但后面总是有一个?,我不知道为什么。

另外,我应该提一下,在 .jsp 中,为了显示将 unicode 转换为 html-compatible-code,我使用了this library。您可以在这里看到使用该方法将 unicode 解析为 hex 与不使用它的区别:

知道这里发生了什么吗?

提到的表情符号是:????(U+1F352) ♦️(U+2666) ❗️(U+2757)

【问题讨论】:

  • 我认为您需要提供这些有问题的表情符号的来源,以便人们帮助诊断此问题
  • @g00se 你的意思是表情符号的代码?
  • 我的意思是你正在阅读的带有表情符号的网址
  • @g00se 我已经提供了从该网址获得的文本,我认为发布整个回复至少没有帮助。
  • 我读了两次你的问题,我不明白你在问什么,问题是什么。您能否检查? 字符的数值(在文本流中尽快)。可能你有一些控制字符(例如标签)

标签: java html unicode character-encoding emoji


【解决方案1】:

想通了。 ? 是十进制字符65039,所以我所做的就是用空格替换那个字符。现在表情符号按我想要的方式显示,后面没有那个符号。

String strFinal = res2.toString().replace((char)65039, ' ');

【讨论】:

    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2023-04-06
    • 2018-08-15
    相关资源
    最近更新 更多