如果我保存了一个日文这样的国际字符,该字符占用了1个以上的字节,那么在UTF-8中读回数据时会丢失数据吗?

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

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

最佳答案

如果我保存了一个日文这样的国际字符,该字符占用了1个以上的字节,那么在UTF-8中读回数据时会丢失数据吗?


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

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


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


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


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


如果您未正确解码UTF-8(即根据规范),则可能会遇到各种垃圾。但是无论如何,您都不应该尝试手动解码它。使用Reader和Writer API,Java将为您处理所有这些工作。


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


这没有道理。每当您将字符从Java写入文件时,您都在隐式地对其编码...即使编码是身份转换(例如UTF-16)

10-07 13:22
查看更多