Java 使用SmbFileInputStream以utf-8编码读取数据
我有一个具有以下字符串的文件:Java 使用SmbFileInputStream以utf-8编码读取数据,java,file,utf-8,character-encoding,fileinputstream,Java,File,Utf 8,Character Encoding,Fileinputstream,我有一个具有以下字符串的文件: Vol conforme à la réglementation 但是,当我使用SmbFileInputStream读取文件时,我得到: Vol conforme � la r�glementation 你能告诉我阅读这个文件的最佳方法吗?这样我就可以得到原始文件中的字符串了。我正在将其转换为utf-8,我不确定这是正确的方法。以下是我正在使用的当前代码: SmbFileInputStream smbFileInputStream = new SmbFileI
Vol conforme à la réglementation
但是,当我使用SmbFileInputStream读取文件时,我得到:
Vol conforme � la r�glementation
你能告诉我阅读这个文件的最佳方法吗?这样我就可以得到原始文件中的字符串了。我正在将其转换为utf-8,我不确定这是正确的方法。以下是我正在使用的当前代码:
SmbFileInputStream smbFileInputStream = new SmbFileInputStream(fileURL);
BufferedReader bufferedFileReader = new BufferedReader(new InputStreamReader(smbFileInputStream, "UTF-8"));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
try {
while ((line = bufferedFileReader.readLine()) != null) {
if (!line.trim().isEmpty()) {
stringBuilder.append(line);
}
}
return stringBuilder.toString();
} finally {
bufferedFileReader.close();
}
您的文件不是UTF-8编码的。根据烘焙字符串的输出,它可能是
ISO-8859-1
编码的或Windowscp1252
编码的,甚至是ISO-8859-15
您应该传递这些编码。除非数据中包含一个映射到错误字符的字节,否则很难很快确定要使用哪种编码
欧元符号是一个很好的测试。它在ISO-8859-1
中不存在,并且在cp1252
和ISO-8859-15
中处于不同的地图位置
记事本++是一个非常棒的工具,用于快速检查具有不同编码的文件。您的代码对于读取具有utf-8编码的文件是正确的。真正的问题是文件的实际编码是什么。
InputStreamReader(smbFileInputStream,“UTF-8”)
应该对UTF-8编码的文件进行解码。由于它被破坏的方式,我怀疑该文件不是UTF-8编码的,或者您正在使用错误的编码进行打印。你是如何检查输出的?这是一个很好的观点。。。文件中的第一行说:但是,我刚刚尝试使用UTF-16,它只返回所有垃圾字符。。因此,我尝试将结果转换为UTF-8,它返回所有问号。@AlastairMcCormack我正在调试和检查元素。另外,发送到我的用户界面,在那里它显示相同的。非常感谢您的帮助!ISO-8859-1对我有效。我会按照你的建议做一些回归测试。