Java读取包含日文字符的文件

标签 java encoding utf-8 iso-8859-1

我正在尝试读取包含一些日语字符的文件。

RandomAccessFile file = new RandomAccessFile("japanese.txt", "r");
String line;
while ((line = file.readLine()) != null) {
   System.out.println(line);
}

它返回一些乱码而不是日语。 但是当我转换编码时,它可以正确打印。

line = new String(line.getBytes("ISO-8859-1"), "UTF-8");

这是什么意思?文本文件是否采用 ISO-8859-1 编码?

$ file -i japanese.txt返回以下内容:

japanese.txt: text/plain; charset=utf-8

请解释一下它明确要求文件从 Latin 1 转换为 UTF-8?

最佳答案

不,readString 是一个过时的方法,仍然在字符集/编码等之前。它将每个字节转换为高字节为 0 的字符。字节 0x85 是行分隔符 (EBCDIC NEL),如果它位于某些 UTF-8 多字节序列中,则实际行将分为两行。还有更多场景是可行的。

最佳使用Files 。它有一个 newBufferedReader(path, Charset) 和一个固定的默认字符集 UTF-8。

Path path = Paths.get("japanese.txt");
try (BufferedReader file = Files.newBufferedReader(path)) {
    String line;
    while ((line = file.readLine()) != null) {
        System.out.println(line);
    }
}

现在您将读取正确的字符串。

RandomAccessFile 基本上用于二进制数据。

关于Java读取包含日文字符的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56965243/

相关文章:

java - eclipse vm 参数中使用的字符编码是什么?

json - 用 alamofire 改变编码体

audio - 仅使用 ffmpeg(以及所有音频流)重新编码视频流

ios - NSMutableURLRequest setValue :forHTTPHeaderField xcode 6. 2 不适用于 "application/json; charset=utf-8"

python - 将 utf-8 写入 Excel CSV

java - 使用java解析json

Java通过连续流而不是文件来解析XML

java - 模算术问题

java - 防止 Jetty 中 session 的最后访问时间更新

python - 处理其中包含 utf-8 文本的 csv 文件