java - UTF-8 编码;只有一些日语字符没有被转换

标签 java encoding utf-8 character-encoding utf

我正在从 Jersey Web Service 获取参数值作为参数,它是日文字符。

这里,'japaneseString'是包含日语字符的网络服务参数。

   String name = new String(japaneseString.getBytes(), "UTF-8");

但是,我能够成功转换一些 sting 文字,而其中一些会产生问题。

以下已成功转换:

 1) アップル
 2) 赤
 3) 世丕且且世两上与丑万丣丕且丗丕
 4) 世世丗丈

虽然这些不是:

 1) ひほわれよう
 2) 存在する

当我进一步调查时,我发现这 2 个字符串正在转换为一些垃圾字符。

 1) Input: ひほわれよう        Output : �?��?��?れよ�?�
 2) Input: 存在する            Output: 存在�?�る

知道为什么有些日文字符没有正确转换吗?

谢谢。

最佳答案

你在这里混合了概念。

String 只是一个字符序列 (chars); String 本身根本没有编码。对于它的值(value),将上面的 characters 替换为 carrier pigeons。一样。信鸽没有编码。 char 也不行。 (1)

你在这里做什么:

new String(x.getBytes(), "UTF-8")

是一个“穷人的编码/解码过程”。您可能已经注意到 .getBytes() 有两个版本:一个将字符集作为参数传递,另一个则不传递。

如果你不这样做,这就是这里发生的情况,这意味着你将使用你的默认字符集获得编码过程的结果;然后您尝试使用 UTF-8 重新解码此字节序列。

不要那样做。只需接收字符串即可。但是,如果您无法将原始字节流读入字符串,则意味着您使用了错误字符集的 Reader。修复那个部分。

有关详细信息,请阅读 this link .

(1) 实际上,char 是一个 UTF-16 代码单元这一事实与本次讨论无关

关于java - UTF-8 编码;只有一些日语字符没有被转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24009119/

相关文章:

java - 如何在java中正确读取阿拉伯数据集?

tomcat - JDBC Resource Pool with Tomcat6 on Centos5.5 和utf8问题

c - 为什么地址栏中的 UTF-8 Unicode 与 GET 形式在 C 中有所不同?

java - 通过 Java Servlet 转发到自身的网页在浏览器后退/前进按钮上的行为不正确

java - 用 Java 编码的 Base64 图像不显示在 HTML 中

Java分割xml文件

php - 无法用字符串中的 &pound 替换 £

php - 如何用 ñ 显示数据库值

java - 如何强制使 Java 正则表达式失败?

java - 当我读Core.Java.Volume.I时,我无法理解这句话的含义