Интернационализированная строка в JTextArea
Как я могу отображать любые неанглийские символы в 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");
1 ответ
Удалите весь этот код, кроме последней строки.
Вы используете кодировку UTF-8 для перевода message
в байты, которые вы затем переводите обратно в строку, используя ту же кодировку. Другими словами, вы сделали бессмысленную конверсию в оба конца.
Оригинальная строка, message
, уже подходит для отображения неанглийских символов. Вам не нужно использовать Charsets в любом случае.
Например:
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);
}
});
}
}