【发布时间】:2021-01-25 14:47:30
【问题描述】:
这里发生了什么?为什么当我使用 utf-8 读取文件时,它会在控制台中输出问号?
这是一个最小的工作示例:
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import static org.apache.commons.io.FileUtils.readFileToString;
import static org.apache.commons.io.FileUtils.writeStringToFile;
public class Main {
public static void main(String... args) throws IOException {
System.out.println("---------");
System.out.println(Charset.defaultCharset());
System.out.println("æ ø å");
System.out.println("æ ø å");
System.out.println("æ ø å");
File inputFile = new File(System.getProperty("user.dir") + "/input.md");
File outputFile = new File(System.getProperty("user.dir") + "/output.md");
String content, encoding;
System.out.println("--------- windows-1252");
encoding = "windows-1252";
content = readFileToString(inputFile, encoding);
System.out.println(content);
System.out.println("--------- iso-8859-1");
encoding = "iso-8859-1";
content = readFileToString(inputFile, encoding);
System.out.println(content);
System.out.println("--------- utf-8");
encoding = "utf-8";
content = readFileToString(inputFile, encoding);
System.out.println(content);
writeStringToFile(outputFile, content, encoding);
}
}
其中input.md 包含:(以 UTF-8 编码)
This is input.md. 'æ' 'ø' 'å'
运行上述代码产生
---------
windows-1252
æ ø å
æ ø å
æ ø å
--------- windows-1252
This is file C. 'æ' 'ø' 'å'.
--------- iso-8859-1
This is file C. 'æ' 'ø' 'å'.
--------- utf-8
This is file C. '�' '�' '�'.
当我使用 UTF-8 读取文件时,为什么会得到 �?这特别奇怪,因为文件是用 UTF-8 编码的。
更新:我的控制台设置为“UTF-8”:
这是从输入文件中提取的字符串中每个字符的十六进制值的屏幕截图:
这是一个更好的十六进制隔离截图:
【问题讨论】:
-
代码的图像是没有用的。我们不能复制和粘贴它,我们不能运行它或测试它,我们不能搜索它,视障用户不能用它做任何事情,就我自己来说,当它被缩放时我几乎看不到它以适应页面。请编辑您的问题并在该图像中添加文本——最好是一个包含您的代码的代码格式文本块,另一个包含您的输出。
-
@VGR 我编辑了这个问题,希望现在更清楚:)
-
将
systemProp.file.encoding=utf-8添加到项目根目录下的gradle.properties文件有帮助吗?在设置中切换到 IntelliJ IDEA 是否有帮助(macOS 上的首选项)|构建、执行、部署 |构建工具 |摇篮 | 使用构建和运行? -
还尝试为设置设置 UTF-8(macOS 上的首选项)|编辑 |文件编码 | 项目编码.
-
@Andrey 在设置下的“文件编码”选项卡中,一切都已被设置为 UTF-8。 screenshot。不,它没有帮助。
标签: java intellij-idea encoding utf-8 character-encoding