所以Java中的'char'是2个字节。 (可从here进行验证。)Java如何将一个3字节的Unicode字符转换为char类型?
我有这样的示例代码:
public class FooBar {
public static void main(String[] args) {
String foo = "€";
System.out.println(foo.getBytes().length);
final char[] chars = foo.toCharArray();
System.out.println(chars[0]);
}
}
和输出如下:
3
€
我的问题是,怎么没的Java适合3字节字符转换为char数据类型?顺便说一句,我正在与参数的应用:-Dfile.encoding = UTF-8
另外,如果我远一点编辑代码并添加以下语句:
File baz = new File("baz.txt");
final DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream(baz));
dataOutputStream.writeChar(chars[0]);
dataOutputStream.flush();
dataOutputStream.close();
最后文件“巴兹.txt“将只有2个字节,并且即使将其视为UTF-8文件,它也不会显示正确的字符。
编辑2: 如果我用UTF-16 BE编码打开文件“baz.txt”,我会在我的文本编辑器中看到€字符,这很有道理。
Java在内部使用UTF-16。请参阅http://stackoverflow.com/questions/9699071/what-is-the-javas-internal-represention-for-string-modified-utf-8-utf-16 –
字符不是字符;它更少 - 这是Java最大的问题之一。请参阅utf8everywhere.org获取关于它如何工作的完整说明。 –