使用 SmbFileInputStream 读取 utf-8 编码的数据

use SmbFileInputStream to read data in utf-8 encoding

我有一个包含以下字符串的文件:

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 中不存在,在 cp1252ISO-8859-15 中位于不同的地图位置。

Notepad++ 是一个很棒的工具,可以快速检查不同解码的文件。