我正在从 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
只是一个字符序列 (char
s); 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/