0

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

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

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

4

2 回答 2

2

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

于 2012-12-29T03:42:54.147 回答
2

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

不会。如果您正确写入/读取文件,您将不会丢失数据。

正确写入/读取文本的简单方法是使用WriterReaderAPI,或者在构造写入器/读取器实例时显式指定编码(例如使用 InputStreamReader / OutputStreamWriter),或者使用 FileReader / FileWriter 并依赖默认平台编码。Java 实现根据显式或隐式选择的编码方案为您处理 char <--> 字节编码和解码。

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

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

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

如果您没有正确解码 UTF-8(即根据规范),您可能会得到各种垃圾。但是无论如何,您都不应该尝试手动对其进行解码。使用 Reader 和 Writer API,Java 将为您处理所有这些事情。

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

这没有意义。每当您将 Java 中的字符写入文件时,您都在隐式编码它们……即使编码是身份转换(例如 UTF-16)

于 2012-12-29T03:46:26.000 回答