考虑以下场景
例子.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/