当我在jar文件上运行时,我的应用程序中未显示Unicode

时间:2016-08-13 11:36:08

标签: java netbeans unicode

我构建了一个Java GUI应用程序,我有一些带有Unicode文本的jLabel。当我从NetBeans IDE运行应用程序时,文本显示为正确的表单,但是当我从.jar文件运行时,文本显示为变形形式。

我的代码:

try {
    jLabel1.setText(new String("ژمارا ناسنامی".getBytes(), "UTF-8"));
} catch (UnsupportedEncodingException ex) {
    Logger.getLogger(dataEntry.class.getName()).log(Level.SEVERE, null, ex);
}

输出

enter image description here

1 个答案:

答案 0 :(得分:0)

仅限尝试:

jLabel1.setText("ژمارا ناسنامی");

确实,您的错误是首先使用StringgetBytes()进行编码,使用默认编码,然后将其解码为UTF-8,这是不正确的您依赖于UTF-8无法使用的默认编码,因为String已经UTF-16编码,因此它已经覆盖了阿拉伯字符。

以下是方法String#getBytes()的Javadoc作为提醒:

  

使用平台将此String编码为字节序列   默认字符集,将结果存储到新的字节数组中。该   当此字符串无法编码时此方法的行为   默认字符集未指定。 CharsetEncoder类应该是   在需要对编码过程进行更多控制时使用。

如果您想正确编码String,则需要使用String#getBytes(Charset)String#getBytes(String)。但是,在这种特殊情况下,甚至不再需要它。