Java JTextArea中的国际化字符串

Java JTextArea中的国际化字符串,java,internationalization,jtextarea,non-english,Java,Internationalization,Jtextarea,Non English,如何在JTextArea中显示任何非英语字符?我尝试了不同的方法,但都不管用。以下代码为任何非英语字符(如日语)打印乱码。在调试模式下,变量msgUtf8Str确实正确显示了本地字符。支持字符集可以很大,示例包括:日语、汉语(普通话)、法语、德语等 String msgUtf8Str = null; byte[] msgUtf8= message.getBytes(Charset.forName("UTF-8")); try { msgUtf8Str = new String(msgUt

如何在JTextArea中显示任何非英语字符?我尝试了不同的方法,但都不管用。以下代码为任何非英语字符(如日语)打印乱码。在调试模式下,变量msgUtf8Str确实正确显示了本地字符。支持字符集可以很大,示例包括:日语、汉语(普通话)、法语、德语等

String msgUtf8Str = null;
byte[] msgUtf8= message.getBytes(Charset.forName("UTF-8"));
try
{
    msgUtf8Str = new String(msgUtf8, "UTF-8");
}
catch(Exception ex){}       
txtMsg.append(msgUtf8Str + "\n");

删除除最后一行之外的所有代码

您正在使用UTF-8字符集将
消息
转换为字节,然后使用相同的字符集将其转换回字符串。换句话说,您进行了无意义的往返转换

原始字符串
message
,已经适合显示非英语字符。您不需要以任何方式使用字符集

例如:

String message = "\u65e5\u672c\u8a9e \u4e2d\u6587 Fran\u00e7ais f\u00fcr";
textMsg.append(message).append("\n");
下面是一个小演示:

import java.awt.EventQueue;
import javax.swing.JOptionPane;

public class I18NDemo {
    public static void main(String[] args) {
        final String message =
            "\u65e5\u672c\u8a9e \u4e2d\u6587 Fran\u00e7ais f\u00fcr";

        EventQueue.invokeLater(new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(null, message);
                System.exit(0);
            }
        });
    }
}

在哪里显示字符串?你是从文件中读取的吗?你在哪台电脑上做这个?它能在其他程序中显示非英语字符吗?很抱歉延迟响应。我能够在文件中写入非英语字符串。这是UTF-8字符集。“消息”在我阅读时已经不是英语了。所以你是对的——我可能不需要使用字符集。但是,它也不是unicode。有一个本地化的属性文件,其中包含例如日语值。我试图显示JTextArea上的值。总之,从文件中读取日语文本并显示在JTextArea上。你能告诉我怎么做吗?当你试图显示信息时会发生什么?你有例外吗?你在JText区域看到奇怪的字符吗,比如“▯" 或"�“或”?我看到像你提到的奇怪字符。你更改了JTextArea的字体了吗?如果你将JTextArea的字体设置为
新字体(font.DIALOG,font.PLAIN,12)
,你会看到什么?