无法将String转换为正确的编码格式

时间:2016-11-27 06:34:15

标签: java encoding

简单地说,我必须创建一个Java程序,它从输入文件中读取行并显示在System.out语句中读取的文本。文件中的一行是“不是一点点”。然后,Java将此行读作“不是有点”。问题是撇号被理解为“—。我一直在寻找许多论坛帖子,找不到可以转换回撇号的解决方案。我用谷歌搜索“甚至是什么”,它说这意味着输入是UTF-8格式的?如何将其转换为可在System.out语句中正确读取的格式。 另外,我不能强行将一个将所有出现的converts转换为撇号的语句,因为可能存在其他UTF-8编码文本会导致问题,所以我不能只强迫每一种可能性。

2 个答案:

答案 0 :(得分:1)

您好像使用Windows-1252编码来读取文件。这里有一个很好的表格,显示了两种编码标准之间的转换。 http://www.i18nqa.com/debug/utf8-debug.html

该字符实际上不是',而实际上是。您可以指定在读取文件时使用的编码。请参阅以下示例。

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;

public class ReadFile {
public static void main(String[] args) throws IOException {
    final ReadFile readFile = new ReadFile();
    readFile.read("Windows-1252");
    readFile.read("UTF-8");
}

private void read(final String charsetName) throws IOException {
    //Java 8 version
    Files.lines(Paths.get("myFile.txt"), Charset.forName(charsetName)).forEach(System.out::println);


    //Older Java version
    final BufferedReader bufferedReader2 = new BufferedReader(
            new InputStreamReader(new FileInputStream("myFile.txt"), charsetName));

    String currentLine;
    while ((currentLine = bufferedReader2.readLine()) != null) {
        System.out.println(currentLine);
    }
}
}

答案 1 :(得分:0)

如果要在文件读取期间指定编码,可以尝试此操作。

    Reader reader = new InputStreamReader(new FileInputStream("path"), "UTF-8"));