我有一个Java字符串,我在操作它时遇到了麻烦。我有一个字符串s,它的值是丞(我随机选择的一个中文字符,我不会说中文)。如果我打电话给
String t = new String(s.getBytes());
if (s.equals(t))
System.out.println("String unchanged");
else
System.out.println("String changed");然后,我得到字符串更改的结果。有人知道这是怎么回事吗?
发布于 2009-10-19 23:14:19
实际上,我想通了,很抱歉发了这篇文章。我使用的是缺省的Java字符集,而不是显式地将其转换为UTF-8字符集。它现在起作用了。
发布于 2009-10-19 23:09:18
因为that method
使用平台的缺省字符集将此字符串编码为字节序列
如果您的默认字符集是ie US-ASCII,您将不会获得该中文字母所使用的相同字节
我想在这个过程中可能会添加/丢弃额外的位/字节。
尝试使用getBytes( String charSetName )
public byte[] getBytes(String charsetName)使用正确的charsetName
发布于 2009-10-20 07:09:31
getBytes()方法使用默认编码。根据文档:
当需要对编码过程进行更多控制时,应该使用CharsetEncoder类。
https://stackoverflow.com/questions/1591612
复制相似问题