2012-05-14 25 views
2

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

如果这是不可能的,这对于任何编程语言或专门用于Java的情况通常都是如此吗?如果可能的话,我将如何继续读取(解码)文件?

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

非常感谢!
N.S.

+3

你可以写从不同的编码到同一个文件产生的字节,但你不一定能够在不知道从哪里字符编码之间的边界所在的文件进行解码。当读取应被解码成B中的字节,你需要知道得到的字符是否是B.鸡和蛋的问题。 –

回答

8

您需要将其作为字节流读取,并事先知道字符在哪个字节位置开始和结束,或者使用某些指定字符组开头和结尾的特殊分隔符/字节范围。通过这种方式,您可以获取特定字符组的字节,并最终使用所需的字符编码对其进行解码。

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

+0

感谢您的回答!我会尽快接受这个(约7分钟)。 至于整个事情的“为什么”?那么,这在客户的心中-_- –

+0

如果事先知道输入数据的编码,而且它不是UTF-8,那么在写入文件时,您总是可以将其转换为UTF-8。 – BalusC

1

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

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

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

+0

也许你有一个WARC文件,其中包含来自Web爬网的多个条目。每个条目可能都有原始网站的编码。 – schmmd

0

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

+0

欢迎来到StackOverflow!这在我看来更像是评论而不是回答。你能否重新制定它,使其更像是一个答案。或者,如果您真的希望将其作为评论,请自行删除。要批评或要求作者澄清,在他们的帖子下留下评论 - 你总是可以评论你自己的帖子,一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation),你会能够[评论任何帖子](http://stackoverflow.com/help/privileges/comment)。 –

相关问题