可以用Java在多个字符集中编码文件吗?

时间:2012-05-14 13:22:20

标签: java character-encoding java-io

我正在开发一个Java插件,它允许人们通过指定他们希望使用的字符集编码来写入和读取文件。但是,我对如何在单个文件中编码多个编码感到困惑。例如,假设A字符来自一个字符集而B字符来自另一个字符集,是否可以将“AAAAABBBBBAAAAA”写入文件?

如果不可能,对于任何编程语言,或者特别是Java,这通常是正确的吗?如果有可能,我将如何继续读取(解码)文件?

我不想使用Charset的encode()和decode()方法,因为使用它们的测试失败了(某些字符集未被正确解码)。我也不想出于各种原因使用第三方程序,所以这个问题的范围纯粹是标准的java包/代码。

非常感谢!
N.S。

3 个答案:

答案 0 :(得分:8)

您需要将其作为字节流读取,并事先知道字符开始和结束的字节位置,或者使用一些特殊的分隔符/字节范围来指示字符组的开头和结尾。这样,您可以获取特定字符组的字节,最后使用所需的字符编码对其进行解码。

此问题并非特定于Java。这个要求很奇怪。我想知道如何混合像这样的字符编码。只需使用一个统一的编码,例如UTF-8,它几乎支持人类所知的所有字符。

答案 1 :(得分:1)

当然,原则上可以将以不同字符集编码的文本写入一个文件,但为什么要这样做呢?

字符编码只是从文本字符到字节的映射,反之亦然。文件由字节组成。编写文件时,字符编码确定字符如何转换为字节,并在读取时确定如何将字节转换回字符。

您可以将文件的一部分编码为一个字符编码,另一部分使用另一个字符编码。您必须有一些机制来跟踪哪些部分使用什么编码进行编码,因为该文件不会自动为您跟踪。

答案 2 :(得分:0)

我也想知道这件事,因为我的客户刚问了一个类似的问题。就像BalusC提到的那样,这不是特定于java的问题。 经过几次来回,我发现真正的问题可能是信息的多重编码,而不是多个编码文件。 即我们有一个xml字符串文本需要用8859-1编码,如果我们将其保存为文件,那么我们需要对其进行编码。 xml的默认编码是UTF-8,我们可能不需要将整个xml编码为8859-1。由于xml节点只是将信息传递给其他系统和内容(xml节点的值,需要与8859-1保持一致)的工具。那么在这种情况下我们需要多个编码吗?可能不是。我们仍然可以使用UTF-8对xml进行编码,然后将其传递。一旦客户端收到xml,那么他们需要读取UTF-8编码文件中的信息,并将xml节点的值保持为8859-1。