【发布时间】:2015-06-23 06:04:50
【问题描述】:
我想读取文本文件并将其打印到控制台,所以我使用以下代码进行了此操作
File file = new File("G:\\text.txt");
FileReader fileReader = new FileReader(file);
int ascii = fileReader.read();
while (ascii != -1)
{
result = result + (char) ascii;
ascii = fileReader.read();
}
System.out.println(result);
虽然我得到了正确的结果,但在某些情况下我会得到一些奇怪的结果。假设我的文本文件中包含以下文本:
Hello to every one
为了有一个文本文件,我使用了记事本,当我改变编码模式时,我的代码会得到奇怪的输出。
Ansi : 大家好
Unicode : ÿþh e l l o t o e v e r y o n e
Unicode 大端:þÿ h e l l o t o e v e r y o n e
UTF-8 : 大家好
为什么我会得到这些奇怪的输出?我的代码有问题吗?或者还有其他原因
【问题讨论】:
-
因为编码方式?您已经提到,当您更改编码模式时会发生这种情况..
-
@Gosu:是的,正如你所看到的,当我改变编码模式时,我得到了不同的结果
-
改用 InputStreamReader 和正确的编码模式?
-
@ElyasHadizadeh 你认为不同的编码有什么用途?如果它们都给出相同的结果,我们只需要一个编码。您还在最后一个示例(UTF-8)中使用了正确的术语(编码)。 Ansi 不是一种编码,你所说的 unicode 实际上是 UTF-16LE 和 UTF-16BE。 Unicode 是字符集,编码是将字符存储为字节的不同方式。
-
@ElyasHadizadeh 这是一本不错的读物:joelonsoftware.com/articles/Unicode.html
标签: java character-encoding java-io