【问题标题】:Converting between ISO-8559-1 and cp1251在 ISO-8559-1 和 cp1251 之间转换
【发布时间】:2012-12-21 20:06:49
【问题描述】:

我的 Android 应用使用的开源库仅接受 ISO-8859-1 编码的文本数据。我有几个来自东欧的用户想要输入 cp1251 编码的文本。这似乎是开源库的一个限制,因为 Java 完全能够支持这些格式以及 unicode 格式。

一种选择是修改开源库以支持多个字符集。是否可以将 cp1251 转换为 ISO-8859-1 然后再转换回来?由于它们都是 8 位语言编码,因此您似乎会以字节级别存储相同数量的数据。但是,当开源库将字节数据加载到采用 ISO-8859-1 编码的字符串中时,ISO-8859-1 中不存在的任何字节值都可能会引发异常。

我不是字符集专家,但我找不到执行此转换的代码示例这一事实让我相信它不会工作,至少不可靠。

【问题讨论】:

  • ISO 8559-1 不存在。你的意思可能是ISO 8859-1
  • 任何字节序列在 ISO-8859-1 中都是有效的。这一切都取决于库的作用以及为什么它不采用字符串而是字节?图书馆叫什么?
  • BalusC - 感谢您指出这一点...现在已修复。
  • Esailija - 库是来自 Apache Commons 的 Sanselan。 svn.apache.org/repos/asf/commons/proper/imaging/trunk/src/main/… 代码显式读取存储在 JPG 中的字节缓冲区,并使用 ISO-8859-1 编码转换为字符串(反之亦然)。我怀疑,由于 JPG 存储只是一袋字节,我可能可以修改库以存储任何编码的字符串。

标签: java android character-encoding cp1251


【解决方案1】:

你是对的,这根本不会很好地工作。 CP1251 中的大多数非 ASCII 字符在 ISO8859-1 中不存在。 (CP1251 是东欧的,包含很多西里尔字符;ISO8859-1 是西欧的,包含重音拉丁字符、标点符号和符号的混合。)两者都有一些字符,但很少(而且几乎都是标点符号)这可能对你没有任何好处。

【讨论】:

  • 好吧,完整地说,8859-1 和 1251 都是 8 位编码,并且都包含完整的 ASCII,因此它们至少共享这一点。 :)
  • 嗯...是的。但如果文本只是 ASCII,编码就不是问题。 :)
猜你喜欢
  • 2012-03-09
  • 2011-06-10
  • 2010-10-13
  • 2018-01-09
  • 1970-01-01
  • 2015-12-07
  • 2014-09-19
  • 1970-01-01
  • 2016-01-12
相关资源
最近更新 更多