Java - 俄语字符串和JTextField,将字符串更改为" ???? ..."

时间:2013-08-10 07:21:12

标签: java swing encoding jtextfield

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

我现在尝试这样做的方式涉及使用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()字符串打印到consol并使用BufferedWriter将其保存到txt文件。如果JTextField中的文本是英文的,我没有这样做的问题。但是,只要我用俄语文本(或任何非英语文本)尝试它,我的输出就会显示为“??????????”。文本进入JTextField的方式很简单,用户在GUI运行时输入它。

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

谢谢你, 埃里克。

2 个答案:

答案 0 :(得分:4)

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

  

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

这可能是个问题。我的猜测是您使用的是FileWriter,或仅使用OutputStreamWriter平台默认编码。

您应该使用OutputStreamWriter(包裹FileOutputStream)但指定编码 - 理想情况下为UTF-8。 UTF-8可以表示Unicode中的所有字符。

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

答案 1 :(得分:3)

System.out.println(ru_name);

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

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

enter image description here