2

我正在尝试从以 Unicode 编码的 .txt 文件中提取数据,因为其中有重音符号(法语名称)。下面是我的一部分代码。字符串 postalCode 的输出中有奇怪的小方块 (squareHsquare1square)。我怀疑这个问题与将内容视为 ASCII 的程序有关。有人请指出我正确的方向。谢谢!

Scanner in = new Scanner(new FileReader("postal_codes.txt"));
currentLine = in.nextLine();

//take first 6 char --> store as variable
postalCode = currentLine.substring(0, 5);
4

4 回答 4

3

这听起来像一个编码问题。我假设“以 Unicode 编码”是指“以 UTF-8 编码”。试试这个:

Scanner in = new Scanner(
    new InputStreamReader(new FileInputStream("postal_codes.txt"), "UTF-8"));

AFileReader自动使用平台的默认编码。这通常不是 UTF-8。

于 2013-03-20T08:22:27.287 回答
3

如果您阅读 javadoc for FileReader,它会说(强调我的):

此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的。要自己指定这些值,请在 FileInputStream 上构造 InputStreamReader

换句话说,您需要使用:

new Scanner(new InputStreamReader(
     new FileInputStream("postal_codes.txt"), StandardCharsets.UTF_8));
于 2013-03-20T08:24:34.003 回答
1

您可以使用番石榴,方法:

Files.readLines(File file Charset charset) : List<String>

包的

com.google.common.io.Files;
于 2013-03-20T08:25:42.007 回答
0

你可以试试这个:

BufferedReader in = new BufferedReader(new FileReader("postal_codes.txt", "UTF-8")));
String content = in.readLine();
postalCode = content.substring(0, 5);
于 2013-03-20T08:22:14.997 回答