Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-俄语字符串和JTextField,将字符串更改为“?”&引用;_Java_Swing_Encoding_Jtextfield - Fatal编程技术网

Java-俄语字符串和JTextField,将字符串更改为“?”&引用;

Java-俄语字符串和JTextField,将字符串更改为“?”&引用;,java,swing,encoding,jtextfield,Java,Swing,Encoding,Jtextfield,我正在编写一个小应用程序,它应该从用户那里接收一些英语和俄语文本,然后对其进行一些处理。如果可能的话,我更愿意把两者都保持在字符串上 我现在尝试的方法是使用swing库编写GUI,特别是JTextField 对于英文字符串,这一切都很好。然而,俄罗斯的弦乐总是以“???????”的形式出现。我觉得我在编码方面做了一些错误的事情,但是我一生都找不到任何关于我应该做什么不同的资源 代码如下: JLabel name_ru; JTextField name_russian; public Gui()

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

我现在尝试的方法是使用swing库编写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()字符串打印到Console,并使用BufferedWriter将其保存到txt文件中。如果JTextField中的文本是英文的,我这样做没有问题。然而,当我尝试使用俄语文本(或任何非英语文本)时,我的输出结果是“???????”。文本进入JTextField的方式很简单,用户可以在GUI运行后输入文本

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

谢谢,, 埃里克

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

运行配置>公共->编码
并从下拉列表中选择UTF-8

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

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

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

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


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

保存的文件中有问题,还是您的输出“到控制台”?你的问题目前还不清楚。对不起,我得到了答案-问题出在控制台输出和文件输出上。我输出的文件是一个测试,因为我怀疑我缺少了一些eclipse设置来允许打印UTF-8。这两个答案都帮助我解决了问题。下次你问问题时,请尽量更具体一些。我们没有你的任何代码,只有关于这个问题的最模糊的描述。请阅读帮助你下次写一个更好的问题。谢谢,这正是我想要的!我不敢相信它如此明显,但我花了这么长时间才找到。。。还有一个问题——一旦我编译并用它制作一个可运行的JAR,我如何确保字符串实际上保留在这种编码中?还是默认情况下保持UTF-8?(我相信我在某个地方读到过…@Eric String reference将正确保存UTF-8字符,您只需确保打印字符串的位置已启用UTF-8即可。例如,我提到的console,您需要确保文件也是Jon在回答中提到的。@Juned Ahsan,谢谢,这就是我希望听到的!谢谢,这帮助了我问题的另一部分!写出来只是我尝试过的一件事,因为我怀疑这应该归咎于配偶。用你的方法尝试一下,结合上面的答案,我也把它写进了一个文件。谢谢!:)
System.out.println(ru_name);