2

我正在编写一个小应用程序,它应该从用户那里接收一些英文和俄文文本,然后对其进行一些处理。如果可能的话,我更愿意将两者都保留在 String 上。

我现在尝试这样做的方式涉及使用swing lib编写的GUI,特别是JTextField。

对于英文字符串,一切正常。然而,俄罗斯的弦乐一直以“??????”的形式出现。我觉得我在编码方面做错了,但我一生都找不到任何关于我应该做些什么的资源。

这是代码:

JLabel name_ru;
JTextField name_russian;

public Gui()
{
    name_ru = new JLabel("Name in Russian:");
    name_russian = new JTextField();
}

public void run()
{
ru_name = name_russian.getText();
System.out.println(ru_name);
}

在实际将我的 JTextField 添加到基于 JFrame 的 GUI 中后,我能够提示打印 JTextField.getText() 字符串以使用 BufferedWriter 将其保存到 txt 文件中。如果 JTextField 中的文本是英文的,那么我没有问题。但是,一旦我尝试使用俄语文本(或任何非英语文本),我的输出就会显示为“??????????”。文本进入 JTextField 的方式很简单,用户在 GUI 运行后输入它。

我环顾四周,但是在这里(或我能找到的其他任何地方)发布的解决方案似乎都没有处理 JTextField 类 - 似乎 .getText() 返回了一个编码错误的字符串......有吗有办法改变吗?帮助!

谢谢你,埃里克。

4

2 回答 2

4

这几乎肯定不是Swing 程序。getText()将返回一个普通的 Java 字符串,它始终是一个 UTF-16 代码单元序列。

并使用 BufferedWriter 将其保存到 txt 文件

这大概就是问题所在。我的猜测是您正在使用FileWriter,或者只是OutputStreamWriter使用平台默认编码。

您应该使用OutputStreamWriter(包装 a FileOutputStream)但指定编码 - 最好是 UTF-8。UTF-8 可以表示 Unicode 中的所有字符。

你没有说你在哪里查看输出 - 你只是说它“出来”。如果您使用记事本或类似工具来查看文件,您可能还需要在此处指定编码。

于 2013-08-10T07:25:11.617 回答
3
System.out.println(ru_name);

将无法使用默认控制台设置打印 UTF-8(俄语)字符。因此它正在打印???为字符。确保用于显示输出的控制台以 UTF-8 编码。如果您使用的是 Eclipse,请转到

Run Configuration > Common -> Encoding并从下拉列表中选择 UTF-8。

在此处输入图像描述

于 2013-08-10T07:24:50.233 回答