我构建了一个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);
}
输出
答案 0 :(得分:0)
仅限尝试:
jLabel1.setText("ژمارا ناسنامی");
确实,您的错误是首先使用String
对getBytes()
进行编码,使用默认编码,然后将其解码为UTF-8
,这是不正确的您依赖于UTF-8
无法使用的默认编码,因为String
已经UTF-16
编码,因此它已经覆盖了阿拉伯字符。
以下是方法String#getBytes()的Javadoc作为提醒:
使用平台将此String编码为字节序列 默认字符集,将结果存储到新的字节数组中。该 当此字符串无法编码时此方法的行为 默认字符集未指定。 CharsetEncoder类应该是 在需要对编码过程进行更多控制时使用。
如果您想正确编码String
,则需要使用String#getBytes(Charset)或String#getBytes(String)。但是,在这种特殊情况下,甚至不再需要它。