【问题标题】:Can a file be encoded in multiple charsets in Java?一个文件可以用Java中的多个字符集编码吗?
【发布时间】:2012-05-14 13:22:19
【问题描述】:

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

如果不可能,这对于任何编程语言是否普遍如此,或者特别是对于 Java?如果可能的话,我将如何继续读取(解码)文件?

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

非常感谢!
NS

【问题讨论】:

  • 您可以将不同编码产生的字节写入同一个文件,但您不一定能够在不知道字符编码之间的边界在哪里的情况下解码文件。在读取应该解码为 B 的字节时,您需要知道生成的字符是否是 B。鸡和蛋的问题。

标签: java character-encoding java-io


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答!我会尽快接受(约 7 分钟)。至于整件事的“为什么”?好吧,这是客户的想法-_-
  • 如果输入数据的编码是事先知道的并且不是 UTF-8,那么你可以在写入文件时将其转换为 UTF-8。
  • @BalusC UTF-8 从 csv 文件中读取日文文本时不支持。虽然 'SJIS' 支持。我想使用 CSVReader 从 csv 文件中使用多语言。从 csv 文件中读取多语言数据的最佳代码是什么?
  • @NyeinMonSoe:您应该使用与最初保存 CSV 文件相同的编码读取 CSV 文件。如果 CSV 文件使用 SJIS 而不是 UTF-8 保存,那么您需要使用SJIS。如果要使用 UTF-8 读取 CSV,则需要使用 UTF-8 保存 CSV。就这么简单。
【解决方案2】:

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

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

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

【讨论】:

  • 也许您有一个 WARC 文件,其中包含来自网络爬网的多个条目。每个条目可能都有原始网站的编码。
【解决方案3】:

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

【讨论】:

  • 欢迎来到 StackOverflow!在我看来,这更像是评论而不是答案。您能否重新制定它,使其读起来更像一个答案。或者,如果您真的打算将其作为评论,请自行删除。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
猜你喜欢
  • 2017-05-11
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2014-07-14
相关资源
最近更新 更多