【问题标题】:Hebrew encoding in JavaJava中的希伯来语编码
【发布时间】:2012-07-19 16:28:03
【问题描述】:

我遇到了编码问题。我有一个 android 应用程序,它包含一个文本字段,允许用户使用希伯来语键盘并键入希伯来语字符。

我希望根据 pc862 希伯来语代码页对这些数据进行编码,以便我可以将其发送到打印机进行打印(打印机被配置为根据此代码页接受数据)。我应该可以使用以下代码做到这一点:

String strData = new String(textData);
byte [] rawData = null;
try
{
    rawData = strData.getBytes("Cp862"); // Cp862: PC Hebrew
}
catch (UnsupportedEncodingException e)
{
    rawData = strData.getBytes();
}

根据此处找到的文档,http://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html

我应该能够对此代码页进行编码。但是,代码不断抛出 UnsupportedEncodingException。我正在使用 java se 7 和 jre 7,并且已经导入了 java.io。我不确定这是为什么。我已经尝试过本文档中的其他代码页以及我尝试过的代码页,其中大多数都正确编码。

有人知道我做错了什么吗?任何见解将不胜感激。

【问题讨论】:

  • 在 Java SE 或 Android 上是否失败?如果 Android 在 SE 规范中缺少许多编码,我不会感到惊讶。如果是这种情况,您可能希望推出自己的(或查找可用于的源代码)标准编码以包含在您的 Android 应用程序中。
  • 在安卓中。我也有同样的想法,可能是Android支持问题。我听说有一些方法可以创建自己的编码,是否有任何关于这样做的文档可以指出?听起来工作量很大。

标签: java android encoding hebrew codepages


【解决方案1】:

您是否尝试过使用名称“IBM862”?

如果我运行以下代码:

public static void main(String[] args) {
    Map<String, Charset> avmap = Charset.availableCharsets();
    for(String name : avmap.keySet()) {
        System.out.println("Charset: "+avmap.get(name));
    }
}

我得到一个可用字符集名称列表,其中包括“IBM862”但不包括 Cp862。根据您链接的页面,“IBM862”是 Cp862 的 java.nio 名称。

【讨论】:

  • 感谢您提供的 sn-p 代码。现在我现在如何检查可用的字符集。这非常有帮助。但是,它仍然不编码。使用 getBytes("IBM862") 仍然会抛出 unsupportedEncodingException
【解决方案2】:

默认编码 (UTF-8) 支持希伯来语,为什么需要 CP862?

【讨论】:

  • 我希望我可以使用 UTF-8,但打印机不支持它。它使用非常古老、很少使用的代码页。我尝试过的任何其他希伯来语编码在打印时都会产生乱码。
【解决方案3】:

我不知道您的应用程序的许可限制,但 GNU Classpath 有这样的编码器和 source is of course available。您可以将其包含在您自己的应用程序中(当然是在许可允许的情况下)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多