为什么这个字符口导致我的扫描仪失败?

时间:2015-05-06 09:58:45

标签: java character-encoding

我正在使用Java Scanner

我有一个.txt文件,其中保存了此文字。

PriceDB = {
    ["profileKeys"] = {
        ["Name - 回音山"] = "Name - 回音山",
    },
    ["char"] = {
        ["Name - 回音山"] = {
            ["CurrentValue"] = "一口价:|cffffffff70,197|TInterface\\MoneyFrame\\UI-GoldIcon:0:0:2:0|t|r",
        },
    },
}

我要做的就是用扫描程序打开这个文件,从文件中提取"CurrentValue" 70,197并将其保存为int。但是,每次打开文件时,它都不会读取一行,并以NoSuchElementException作为消息抛出"No line found"。在摆弄文件并逐一删除一些汉字后,我把它缩小到这个小家伙口。出于某种原因,扫描仪不喜欢这个角色。我只是想知道是否有一些我需要更改的编码设置,或者我是否会使用BufferedReader或者什么......我真的不确定发生了什么,除了我猜有编码错误。那么这里发生了什么?

编辑:这是我的扫描仪的初始化。

Scanner scanner;
if (region.equals("US")) {
                scanner = new Scanner(new File("C:\\Program Files\\World of Warcraft\\WTF\\Account\\313023286#1\\SavedVariables\\WoWTokenPrice.lua"));
            } else if (region.equals("EU")) {
                scanner = new Scanner(new File("C:\\Program Files\\World of Warcraft\\WTF\\Account\\313495228#1\\SavedVariables\\WoWTokenPrice.lua"));
            } else if (region.equals("China")) {
                File file = new File("C:\\Program Files\\World of Warcraft\\WTF\\Account\\232241227#1\\SavedVariables\\WoWTokenPrice.lua");
                System.out.println(file.exists());
                scanner = new Scanner(file);
            } else {
                System.exit(1);
                break;
            }

我只是原样复制它。 region ==“中国”

1 个答案:

答案 0 :(得分:5)

创建Scanner时,您必须指定正确的编码。构造函数:

public Scanner(InputStream source, String charsetName)
  

构造一个新的Scanner,它生成从指定输入流扫描的值。使用指定的字符集将流中的字节转换为字符。

Find here your charset,我猜UTF-16但不是外国专家:)。

Scanner scanner = new Scanner(is, StandardCharsets.UTF-16.toString());