Java - 阅读国际字符

时间:2012-12-29 03:36:48

标签: java internationalization

如果我保存一个国际字符,如日语,需要超过1个字节来表示,在UTF-8中我会在读回数据时丢失数据吗?

我的意思是,如果我使用UTF-8,我会使用2个字节来保存一个字符。当我读取字节时,我可能会在读取第二个字节之前读取第一个字节,在这种情况下,它会显示完全不同的字符或乱码?

有没有办法保存这些国际字符并在不使用任何编码和解码的情况下读取它们?

2 个答案:

答案 0 :(得分:2)

UTF-8正是您所需要的。阅读http://en.wikipedia.org/wiki/UTF-8

答案 1 :(得分:2)

  

如果我保存一个像日语这样的国际字符,需要超过1个字节来表示,在UTF-8中我会在读回数据时丢失数据吗?

没有。如果正确地写/读文件,您将不会丢失数据。

正确编写/读取文本的简单方法是使用WriterReader API在构造编写器/读取器实例时明确指定编码(例如,使用InputStreamReader / OutputStreamWriter),或使用FileReader / FileWriter并依赖于默认的平台编码。 Java实现负责char< - >基于显式或隐式选择的编码方案为您进行字节编码和解码。

  

我的意思是,如果我使用UTF-8,我会使用2个字节来保存一个字符。

实际上,一个,两个或三个字节取决于Java char值。

  

当我读取字节时,我可能会在读取第二个字节之前读取第一个字节,在这种情况下,它会显示完全不同的字符或乱码?

如果您没有正确解码UTF-8(即根据规范),您可能会得到各种垃圾。但是你不应该试图用手解码它。使用Reader和Writer API,Java将为您处理所有这些内容。

  

有没有办法保存这些国际字符并在不使用任何编码和解码的情况下读取它们?

这没有意义。无论何时将Java中的字符写入文件,您都隐式地对它们进行编码...即使编码是身份转换(例如UTF-16)