读入的文本与指定的文本不同

时间:2015-01-16 16:43:31

标签: java string encoding fonts character-encoding

我有一个应该很简单的问题。我必须遗漏一些基本的东西。我创建了一个String viz。

String text = "\u0391\u039A\u03C1\u1F83\uA978\u0370\u03D8\u03C0";

如果我使用默认字体作为JLabel的参数,它会按照我的意愿打印希腊字符。

但是,如果我将相同的字符串(当然没有引号)放入文本文件并读取该行并将该行分配给JLabel,我会得到“未解释的”字符串。它看起来就像它在文件中一样。我尝试使用不同的编码来读取像ISO-8859-1,UTF-8,UTF-16等文件一样无济于事。

如何让阅读文本就像分配的文本一样?

尝试

String text = "\u0391\u039A\u03C1\u1F83\uA978\u0370\u03D8\u03C0";
System.out.println( "As ascii text = " + text );

String label = new String( readLabel( directory + File.separator
+ "testReadLabel.txt" ) );
System.out.println( "As ascii label = " + label );

当testReadLabel.txt包含上述文本且read是标准

BufferedReader br = new BufferedReader( new InputStreamReader(
new FileInputStream( fileName ), "ISO-8859-1" ) );

return br.readLine();

2 个答案:

答案 0 :(得分:1)

在您从文件中读取字符串后,首先必须 unescape 字符串。你可以,例如使用StringEscapeUtils中的Apache Commons执行此操作:

String label = StringEscapeUtils.unescapeJava(stringFromFile);

答案 1 :(得分:0)

反斜杠转义码由编译器在字符串文字中翻译。它们未在文件IO中翻译。如果要解析转义码,您必须自己执行此操作或使用库为您执行此操作。