Java Unicode 问题(我认为)

标签 java unicode java.util.scanner

我是 Java 的新手,如果我说了任何愚蠢的话,请多多包涵!我遇到了一些问题,我认为这些问题与 Unicode 相关。

我正在使用 Scanner 从文本文件中读取标记化的命令,并以 UTF-8 编码保存。基本上我想首先检查命令不等于“command1”或“command2”(在这些情况下我做了其他事情),否则读入一个字符。如果 token 不是单个字符,我将输出错误。

这是我的代码:

public static void main(String[] args) throws FileNotFoundException {
    Scanner scanner = new Scanner(new File(args[0]));
    while (scanner.hasNext()) {
        String command = scanner.next();
        if (command.equals("command1")) {
            System.out.println("command: command1");
            // do something
        } else if (command.equals("command2")) {
            System.out.println("command: command2");
            // do something
        } else {
            if (command.length() == 1) {
                char c = command.charAt(0);
                System.out.println("character: " + c);
                // do something with c
            } else {
                System.err.println("error (string was " + command
                        + " with length " + command.length() + ")");
            }
        }
    }
}

以及我在 args[0] 中传递其文件名以进行测试的文本文件的内容:

command1
x
y
command2
z
└
command1
╒
═

预期输出是:

command: command1
character: x
character: y
command: command2
character: z
character: └
command: command1
character: ╒
character:  ═

实际输出为:

command: command1
character: x
character: y
command: command2
character: z
error (string was └ with length 3)
command: command1
error (string was ╒ with length 3)
error (string was ═ with length 3)

如您所见,Java 将非标准字符视为 3 个字符的字符串。奇怪的是,如果我将终端输出中的一个字符复制/粘贴到 System.out.println("└".length()) 语句中,它会正确打印 1.

对我哪里出错有什么想法吗?
谢谢

最佳答案

当您在 Java 中打开文件时,编码(如果您未指定编码)取自 file.encoding 系统属性。这几乎永远不会设置为您想要的东西(如果您像我一样,您总是想要 UTF-8)。

要修复,请在创建扫描器时明确指定字符集:

Scanner scanner = new Scanner(new File(args[0]), "UTF-8");

关于Java Unicode 问题(我认为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9085433/

相关文章:

涉及日语的PHP正则表达式

java - 使用扫描仪读取文件?这段代码有什么问题?

java - 断线器应用

java - 错误地将 token 传递给字符串数组

返回 javax.ws.rs.core.Response 对象的 Java JMX 调用方法不起作用(获取 NotSerializedException)

java - 是否可以控制 Mixer.Info 字符集?

java - JSF 包加载失败

unicode - $(印度卢比符号)符号打印为? (问号)使用 Apache PDFBOX 生成 pdf

java - 类参数缺少最后的引号

java - 使用模式和匹配器检索一些文本