【发布时间】:2016-08-09 08:22:38
【问题描述】:
我在读取以前用我自己的代码编写的编码文件时遇到问题。
正确显示原始字符串(包括重音符号)
我将字符串保存到编码文件的代码如下:
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(fileName),
"ISO-8859-1");
writer.write(text);
然后,我这样读取文件:
InputStream is = getClass.getResourceAsStream(fileName);
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is, "ISO-8859-1"));
String line;
StringBuilder sb = new StringBuilder();
while( (line = br.readLine()) != null ) {
sb.append(line);
}
String result = sb.toString();
} catch (UnsupportedEncodingException e3) {
} catch (IOException e) { }
字符串结果显示不正确。例如,缺少重音符号。
我还尝试了其他方法,例如将字符串编码为字节,然后将这些字节写入文件。我总是得到相同的结果,其他 ISO 编码也是如此。有什么想法吗?
【问题讨论】:
-
API 工作正常,你终端的编码设置肯定有其他错误。
-
你在文件系统上写了一个文件,但读取是从资源中发生的,在类路径上,可能打包在一个 jar 或 war 中。这可能意味着您正在谈论两个不同的文件,可能一个在您的源目录中,一个在构建目录或 jar 中。阅读内容甚至可能是在书面版本之前的缓存版本。更改内容以检查。 (然后
append("\r\n")不见了,最后的电话也不见了。) -
无法复制。如果您读取具有与写入文件相同的编码的文件,则会得到相同的字符 - 但我必须添加一个明确的
writer.close()才能实际写入。可能发生的情况:未按照 Joop 的建议读取预期文件,在配置错误的终端上显示其中一个文件等。但这不是 Java 转换问题。 -
您能否提供一个示例来说明您的实际问题。尤其是
text和result的值。也许你也可以为它们提供一个十六进制字节。
标签: java file encoding writing