【问题标题】:Reading unicode txt in java在java中读取unicode txt
【发布时间】:2013-03-09 05:54:48
【问题描述】:

我正在尝试从以 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);

【问题讨论】:

  • “Unicode 编码”是什么意思? Unicode 不是一种编码。
  • @R.MartinhoFernandes 抱歉,如果该陈述不正确;我不是天才。我想你可以猜到我的意思。
  • 关键是我做不到。我可以做出几个有根据的猜测,但无法确定是哪一个。

标签: java unicode non-ascii-characters


【解决方案1】:

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

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

换句话说,你需要使用:

new Scanner(new InputStreamReader(
     new FileInputStream("postal_codes.txt"), StandardCharsets.UTF_8));

【讨论】:

  • 获胜者是马克!非常感谢!
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢,我以为这样可以解决问题,但输出是一样的。
  • @James - 尝试其他编码。如果其他每个字符都很奇怪,那么文件可能保存为 UTF-16(或 UTF-16LE 或 UTF-16BE)。最好的办法是准确确认生成文件所使用的编码。
  • 感谢@TedHopp,该评论也有助于解决问题。
【解决方案3】:

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

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

com.google.common.io.Files;

【讨论】:

    【解决方案4】:

    你可以试试这个:

    BufferedReader in = new BufferedReader(new FileReader("postal_codes.txt", "UTF-8")));
    String content = in.readLine();
    postalCode = content.substring(0, 5);
    

    【讨论】:

    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多