Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SmbFileInputStream以utf-8编码读取数据_Java_File_Utf 8_Character Encoding_Fileinputstream - Fatal编程技术网

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
编码的或Windows
cp1252
编码的,甚至是
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对我有效。我会按照你的建议做一些回归测试。