繁体   English   中英

Java国际化

[英]Java Internationalization

我在处理Java字符串时遇到麻烦。 我有一个字符串s,其值是丞(我随机选择的中文字符,我不会说中文)。 如果我打电话

String t = new String(s.getBytes());
if (s.equals(t))
    System.out.println("String unchanged");
else
    System.out.println("String changed");

然后我得到String更改的结果。 有人知道发生了什么吗?

因为那个方法

使用平台的默认字符集将此字符串编码为字节序列

如果您的默认字符集为US-ASCII ,则不会获得该中文字母使用的相同字节

我想可能会在此过程中添加/删除一个额外的位/字节。

尝试使用getBytes(String charSetName)

public byte[] getBytes(String charsetName)

使用正确的charsetName

getBytes()方法使用默认编码。 根据文档:

当需要对编码过程进行更多控制时,应使用CharsetEncoder类。

实际上,我知道了这一点,对这个帖子感到抱歉。 我使用的是默认的Java字符集,而不是将其显式转换为UTF-8字符集。 现在可以使用了。

字符串t =新的String(s.getBytes()); 可以使用ASCII作为默认字符集创建字符串。 使用以下方法创建以charsetName为UTF-8的字符串

String(byte []个字节,int偏移量,int长度,字符串charsetName)

暂无
暂无

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

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