Java 从文件中读取特殊字符时出现问题

Java 从文件中读取特殊字符时出现问题,java,file-io,filestream,Java,File Io,Filestream,我在读取带有特殊字符的文件时遇到了一个问题。我的.txt文件包含以下数据: 我正在使用以下代码读取此文件: StringBuilder sBuilderString = new StringBuilder(); for (int n; (n = loInputStream.read()) != -1;) { sBuilderString.append((char)n); } 这个字符串现在再次用于写入文件,问题是当我写入文件时,这两个字符中的一个被其他特殊字符替换 如何编写能够读取所

我在读取带有特殊字符的文件时遇到了一个问题。我的.txt文件包含以下数据:

我正在使用以下代码读取此文件:

StringBuilder sBuilderString = new StringBuilder();

for (int n; (n = loInputStream.read()) != -1;) {
    sBuilderString.append((char)n);
}
这个字符串现在再次用于写入文件,问题是当我写入文件时,这两个字符中的一个被其他特殊字符替换


如何编写能够读取所有特殊字符并将其写入另一个文件的代码?

使用InputStreamReader并指定文件中使用的编码。

您的字符编码有问题。对“(char)n)的调用将使用系统的默认字符编码有效地将字节n转换为字符,这可能与源文件的编码不同

避免这种情况的一种方法是将InputStream包装在CharacterInputStream中,您可以在其中指定字符编码:

Reader reader = new InputStreamReader( loInputStream, "UTF-8");
然后可以继续将流读入StringBuilder。我还建议使用bufferedReader包装您的阅读器,以提高阻塞IO流的性能

Reader reader = new BufferedReader(new InputStreamReader( loInputStream, "UTF-8"));

@maasg:如何获取文件的编码格式(我正在尝试读取图像流,.jpg文件)@Ankit:这是二进制数据,不是文本,所以不要将其视为文本。把它放在
StringBuilder
@Ankit上是没有意义的,正如@ninjalj所说的,不要把二进制数据当作字符。您需要始终将is保留为字节。调查nio。ByteBuffer@Ankit顺便说一句,你的问题“我的.txt文件有数据…”没有暗示jpg格式。下次要记住的东西。@maasg&@ninjalj:谢谢你的努力,我之所以想将流作为字符串读取,是因为我想在REST的post请求中发送这个流字符串,在那里它可以再次作为图像重新创建。我不能直接接受流的形象再造。