【问题标题】:Java Scanner Class bad character "®"Java 扫描程序类坏字符“®”
【发布时间】:2017-04-01 12:59:48
【问题描述】:

我有一个扫描程序类将文件读入字符串。任何带有此字符“®”的文件都会导致它失败。我是 Java 新手,有没有更好的方法来读取此文件以便接受该字符?

public void readFile(String fileName)
{
    fileText = "";

    try
    {
        Scanner file = new Scanner(new File(fileName));
        while (file.hasNextLine())
        {
            String line = file.nextLine();
            fileText += line +"\r"+"\n";
        }
        file.close();
    }
    catch (Exception e)
    {
         System.out.println(e);

   }
      }

【问题讨论】:

  • 它会抛出什么错误?
  • 如果可能的话,你能不能使用 hexdump -C 把包含 (R) 字符的文件的一小部分...
  • “任何带有这个字符“®”的文件都会导致它失败。”你怎么知道?

标签: java unicode


【解决方案1】:

默认情况下,Scanner 使用平台默认字符编码,这可能与文件的字符编码不匹配。 JavaDoc 状态:

构造一个新的 Scanner 来生成从 指定的文件。文件中的字节被转换为字符 使用底层平台的默认字符集。

首先确定文件的字符编码,这可以通过 Linux 命令行实用程序file -i 来完成。将正确的编码传递给扫描仪。 Java 7 在java.nio.charset.StandardCharsets 中包含一些众所周知的字符集的预定义常量。

Scanner file = new Scanner(new File(fileName), StandardCharsets.UTF_8);

【讨论】:

  • “确定你的文件用什么字符编码”在它周围阅读看起来是一个常见问题?任何人有更好的方法然后最好的猜测?
  • @Minerbob One 应该提前知道他们的数据文件正在使用哪种编码。如果您的业务是打开客户可能发送给您的任何随机文件,那么是的,明智的猜测是最好的选择。
【解决方案2】:

在创建扫描仪时提及编码。

Scanner file= new Scanner(new File(fileName), "utf-8");

【讨论】:

  • 我使用的是 BlueJ,它不会抛出错误,它只是退出循环并将我的字符串留空。
  • 感谢您的领导,utf-8 对我不起作用,但当我使用 ISO-8859-1 时,它起作用了。看来我需要读一点。谢谢。
【解决方案3】:

您只需在创建 Scanner 类的实例时提及编码 UTF-8 即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多