繁体   English   中英

Java unicode 奇怪的行为

[英]Java unicode strange behaviour

我正在使用 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 comportament。\\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,我使用了这个库 您可以在这里看到使用该方法将 unicode 解析为十六进制与不使用它的区别:

在此处输入图片说明

在此处输入图片说明

知道这里发生了什么吗?

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

弄清楚了。 那个? 是十进制的字符65039 ,所以我所做的是用空格替换该字符。 现在表情符号按照我的意愿显示,后面没有那个符号。

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

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM