将带有“ñ”字符的字符串写入txt文件

时间:2013-12-15 00:01:57

标签: java string file character-encoding

我有一个奇怪的问题,试图用包含“ñ”,“á”等字符的字符串写入文本文件。让我先向您展示我的一小段代码:

import java.io.*;

public class test {

public static void main(String[] args) throws Exception {       

    String content = "whatever";

    int c;
    c = System.in.read();        
    content = content + (char)c;

    FileWriter fw = new FileWriter("filename.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write(content);
    bw.close();

}

}

在这个例子中,我只是从键盘输入中读取一个字符并将其附加到给定的字符串;然后将最终字符串写入txt。问题是如果我输入一个“ñ”例如(我有一个西班牙语布局键盘),当我检查txt时,它会显示一个奇怪的字母“¤”,其中应该有一个“ñ”,即内容该文件是“whatever¤”。 “ç”,“ú”等也会发生同样的情况。然而它写得很好(“whateverñ”),如果我忘记了键盘输入,我写道:

...
String content = "whateverñ";
...

...
content = content + "ñ";
...

这让我觉得read()方法可能有问题吗?或者也许我错误地使用它?或者我应该使用不同的方法来获得键盘输入?要么..?我有点迷失了。

(我使用的是jdk 7u45 @ Windows 7 Pro x64)

2 个答案:

答案 0 :(得分:1)

所以......

  • 如果您将它们写为文字字符串,它可以正常工作(即您可以读取输出文件上的重音字符)。

  • 从System.in读取它们然后编写它们时它不起作用。

这表明问题出在输入端。具体来说,我认为您的控制台/键盘必须使用与Java认为应该使用的编码不匹配的输入流的字符编码。

您应该能够通过以十六进制输出正在读取的字符来确认此暂定诊断,然后根据unicode表(例如,您可以在unicode.org上找到)检查代码。


“平台默认编码”似乎在输出端工作,而不是输入端,这让我感到“奇怪”。也许其他人可以解释......并提出修复它的具体建议。我的直觉是,问题在于键盘的配置方式,而不是Java或您的应用程序。

答案 1 :(得分:0)

文件不记得它们的编码格式,当你查看.txt时,文本编辑器会对使用的编码做出“最佳猜测”。

如果您尝试再次将文件读入程序,则文本应恢复正常。

另外,请尝试直接打印“奇怪”字符。