【问题标题】:Working with UTF-8 characters, Java使用 UTF-8 字符,Java
【发布时间】:2018-05-17 02:25:55
【问题描述】:

我的基本代码正在尝试根据路径检查文件是否存在,但它无法处理 Unicode 字符:

        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        File f = new File(input);
        if (f.exists()) {
            System.out.println("File is Found, According to java.io");
        } else {
            System.out.println(f.toString() + " is Not Existed, According to java.io ");
        }

        Path x = Paths.get(input);
        if (Files.exists(x)) {
            System.out.println("File is Found, According to java.nio");
        } else {
            System.out.println(x.toString() + " is Not Existed, According to java.nio");
        }

当输入(即文件路径)是 ASCII 时,代码可以正常工作,但是当输入包含 UTF-8 字符时,代码在两者中都失败:

1- 正确打印输入。

2-确定文件是否存在(即即使文件存在,代码也会告诉文件没有退出)

例子:

输入:

c://€.jpg

输出:

c:\�.jpg 不存在,根据 java.io

c:\�.jpg 不存在,根据 java.nio

我使用 NetBeans、Java 1.8、maven。

PS:我试过用:

运行:

-Dfile.encoding=UTF-8

在项目属性中添加以下内容:

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

,但什么也没发生。

有什么帮助吗?

【问题讨论】:

  • 问题是你需要使用正确的输入编码,所以字符串是正确的。使用调试器检查 input 是否包含您在设置时所期望的内容。您可能会感到惊讶。

标签: java maven unicode encoding utf-8


【解决方案1】:

准确地说,您不需要文件编码,而是需要输入编码。因此,您可以使用 Scanner(InputStream source, String charsetName) 构造函数为您的 Scanner 指定一个字符集:

Scanner scanner = new Scanner(System.in, "UTF-8");

【讨论】:

  • 抱歉,没有任何改变。
  • @Nosairat 尝试从以 UTF-8 编码的文本文件中管道输入。您的终端和扫描仪的编码可能不一致或不支持您尝试使用的字符。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 2011-04-19
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
相关资源
最近更新 更多