【问题标题】:Create a file using Cp1250 in Java在 Java 中使用 Cp1250 创建文件
【发布时间】:2012-11-03 22:29:19
【问题描述】:

我正在尝试使用 Cp1250 字符集创建文件:

out = new BufferedWriter(
        new OutputStreamWriter(
        new FileOutputStream("/path/filename"), Charset.forName("Cp1250")));

但是,当我使用juniversalchardet 检测到实际字符集时, 它说 WINDOWS-1252Cp1252(根据 javadoc)。

Enca (enca -L czech -g filename) 检测到 ISO-8859-2

如何准确设置 Cp1250(或者,使用 java.nio API 名称,windows-1250)?

谢谢

卡雷尔

【问题讨论】:

  • Charset.forName("windows-1250") ???
  • “纯文本”文件通常不包含有关其字符编码的元数据。检测类使用启发式和统计,本质上是不可靠的。切换到具有严格定义的编码方案的文件格式。
  • 这个文件的内容是什么,因为一个工具几乎不可能区分 windows-1250 和 windows-1252,因为在字节级别上它看起来是相同的,除了基于启发式关于某些字符的出现频率。

标签: java file character-encoding cp1252 cp1250


【解决方案1】:

任何编码检测程序只能是启发式的,当涉及到对所有文件基本上有效的编码(例如,每个字符总是一个字节并且每个字节都有一个字符映射的那些)。

您应该编码一些您知道会在Windows-1250Windows-1252 之间导致不同结果的文本,并查看您的代码实际执行的操作。我怀疑你会发现它实际上在做正确的事情。

【讨论】:

  • 非常感谢。我一直只使用“čača”作为文件内容,其中不包含这两个字符集中不同位置的所有字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多