Java 读取包含日文字符的文件
Java reading file containing japanese characters
我正在尝试读取一个包含一些日文字符的文件。
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
returns 以下:
japanese.txt: text/plain; charset=utf-8
请解释它明确要求文件从 Latin 1 转换为 UTF-8?
它看起来像是 ISO,但我会尝试使用该编码进行阅读,看看会发生什么。
由于您不进行随机访问,我将创建一个具有正确编码的 BufferedReader 并使用它:
String charSetName = // either UTF-8 or iso - try both
FileInputStream is = new FileInputStream(fileName);
InputStreamReader isr = new InputStreamReader(is, Charset.forName(charSetName));
BufferedReader reader = new BufferedReader(isr);
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
不,readString
是一种过时的方法,仍然在 charsets/encodings 之前。它将每个字节转换为高字节为 0 的 char。字节 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 基本上用于二进制数据。
我正在尝试读取一个包含一些日文字符的文件。
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
returns 以下:
japanese.txt: text/plain; charset=utf-8
请解释它明确要求文件从 Latin 1 转换为 UTF-8?
它看起来像是 ISO,但我会尝试使用该编码进行阅读,看看会发生什么。
由于您不进行随机访问,我将创建一个具有正确编码的 BufferedReader 并使用它:
String charSetName = // either UTF-8 or iso - try both
FileInputStream is = new FileInputStream(fileName);
InputStreamReader isr = new InputStreamReader(is, Charset.forName(charSetName));
BufferedReader reader = new BufferedReader(isr);
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
不,readString
是一种过时的方法,仍然在 charsets/encodings 之前。它将每个字节转换为高字节为 0 的 char。字节 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 基本上用于二进制数据。