【问题标题】:Any freeware java library to encode from Unicode to CP866?任何从 Unicode 编码到 CP866 的免费软件 java 库?
【发布时间】:2013-06-17 10:48:32
【问题描述】:

我正在尝试打印到仅支持 CP866 编码的设备。

不幸的是,我打印的设备(Android 设备)不支持 CP866,导致"abc".getBytes("CP866") 抛出UnsupportedEncodingException

所以,我想,我必须自己编码 UnicodeCP866。是否有任何免费软件 java 库可以做到这一点?

【问题讨论】:

  • 根据this page CP866 在每次安装Oracle Java 7 Runtime 时都支持开箱即用。您使用什么 JRE/JDK?哪个版本?
  • 旁注:“免费软件”是一个......具有非常特殊含义的古老术语。如今几乎没有任何软件作为免费软件发布。您可能在寻找“开源”或“免费软件”(或只是“免费提供”软件)。
  • 1.6 因为我的发送设备是安卓手机
  • 所以代码在Android上运行?那么他们有可能拥有一套完全不同的(并且可能更小)的支持编码集。为什么不只是transmit data as UTF-8?每个人都支持那个
  • 不,接收设备仅支持 Cp866。这是俄罗斯设备。

标签: java android character-encoding cyrillic cp866


【解决方案1】:

根据 Oracle 文档,Cp866 是 Java 7 支持的编码。所以

  • 您使用的是不支持 Cp866 的旧版 Java(例如,请参阅 @Joachim 的评论!!!),或者
  • Java 运行时无法识别您正在使用的名称。 (字符集的规范名称是 "Cp866" 而不是 "CP866"。)

UPDATE - 不太可能是后者。从我从the source 可以看出,标准“提供者”使用的字符集查找机制不区分大小写。

参考资料:

【讨论】:

  • 在 Java 5 中,编码为 provided by charsets.jar,并不总是安装(取决于计算机的语言设置)。 Java 6 already had it in rt.jar.
  • Java 6 支持此功能(根据documentation)。
  • 我的发送设备是安卓设备。它有Java 1.6。 "abc".getBytes("Cp866") 抛出异常。那我应该改用其他代码吗?
  • @Alex:Android 不是 Java 1.6。它是“类似于 Java 的东西”(谷歌为 Dalvik)。我假设它们只支持一小组编码(因为 Android 上的遗留故事较少)。
  • 嗯 ... this question 是相关的,但没有完整的答案。
【解决方案2】:

http://msdn.microsoft.com/en-us/goglobal/cc305166 有字符列表;如果没有预先制作的选项起作用,编写代码来遍历将 Unicode 字符转换为适合 CP866 的字节的数组根本不需要太多时间。

【讨论】:

  • 事实证明,我花在这上面的时间比搜索任何图书馆的时间都要少。非常感谢!
【解决方案3】:

java.nio.charset.Charset 类同时支持 Cp866,当然也支持 Unicode。我想您可以将其与encodedecode 方法一起使用。

【讨论】:

    【解决方案4】:

    我需要在 android 中使用 Cp866 对字符串进行编码。您可以将 java 库与组成的字符集类一起使用。其中cp866。

    这是链接:http://www.doc.ic.ac.uk/~awl03/cgi-bin/trac.cgi/miro/browser/trunk/gcc/libjava/classpath/gnu/java/nio/charset

    如果你想扩展 Charset 类并添加你私有的 Charset: Java NIO。第6章字符集

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多