2012-07-19 49 views
0

我有一个编码问题。我有一个android应用程序,它由文本字段组成,允许用户使用希伯来语键盘和希伯来字符中的键。Java中的希伯来文编码

我希望根据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.我不确定这是为什么。我已经尝试了本文档中的其他代码页以及我尝试过的代码页,其中大部分都是正确编码的。

有没有人有任何想法我做错了什么?任何有识之士将不胜感激。

+0

在Java SE或Android中失败了吗?如果Android在SE规范中错过了许多编码,我不会感到惊讶;如果是这种情况,您可能想要将自己的(或可以找到的源代码)编码标准包含在您的Android应用程序中。 – antlersoft 2012-07-19 16:33:44

+0

在android中。我认为同样的事情,也许这是Android支持问题。我听说有一些方法可以创建自己的编码,有没有关于这样做的文档可以指向?这听起来像很多工作。 – user1313973 2012-07-19 16:57:42

回答

0

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

+0

我希望我可以使用UTF-8,但打印机不支持它。它使用非常旧的,很少使用的代码页。我试过的任何其他希伯来编码在打印时都会产生乱码。 – user1313973 2012-07-19 16:55:38

0

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

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

+0

感谢您的代码片段。现在我现在如何检查可用的字符集。这非常有帮助。但是,它仍然不编码。使用getBytes(“IBM862”)仍会引发unsupportedEncodingException – user1313973 2012-07-23 16:32:04