gpt4 book ai didi

Java - 编译器错误地解析 unicode 源文件

转载 作者:行者123 更新时间:2023-12-05 09:21:28 26 4
gpt4 key购买 nike

考虑以下场景

例子.txt:

ÄäÖöÜü

Java 源代码:

try (FileInputStream fileInputStream = new FileInputStream("example.txt");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) {

String stringLoadedFromOutside = bufferedReader.readLine();
String stringConstructedInside = "ÄäÖöÜü";

System.out.println("string constant: " + stringConstructedInside);
System.out.println("loaded string: " + stringLoadedFromOutside);
System.out.println("equal: " + stringConstructedInside.equals(stringLoadedFromOutside));
} catch (IOException e) {
e.printStackTrace();
}

这两个文件都以 UTF-8 编码。

这个输出:

string constant: ÄäÖöÜü
loaded string: ÄäÖöÜü
equal: false

如何防止编译器将源代码中的 unicode 转换为错误的字符串?

最佳答案

问题是编译器采用了系统的标准字符集,而 UTF-8 显然不是系统的标准字符集。

直接使用javac时:

javac -encoding utf8 MySourceFile.java

在使用gradle时,可以使用:

  • 对于所有 java 编译器任务:

    tasks.withType(JavaCompile) {
    options.encoding = 'utf8'
    }
  • 对于单个任务:

    compileJava.options.encoding = 'utf8'

现在代码将输出:

string constant: ÄäÖöÜü
loaded string: ÄäÖöÜü
equal: true

关于Java - 编译器错误地解析 unicode 源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32012622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com