使用 Java 中的特定编码写入文件

Write to a file with a specific encoding in Java

可能与我的有关(关于如何将"för"转换为"för")

所以我有一个在我的代码中创建的文件。现在我通过以下代码创建它:

FileWriter fwOne = new FileWriter(wordIndexPath);
BufferedWriter wordIndex = new BufferedWriter(fwOne);

其次是几个

wordIndex.write(wordBuilder.toString()); //that's a StringBuilder

结束(经过 while 循环)
wordIndex.close();

现在的问题是这个文件很大,我想(需要)跳进去而不用遍历整个文件。 RandomAccessFileseek(long pos) 方法让我可以做到这一点。

这是我的问题:我创建的文件中的字符似乎是用 UTF-8 编码的,我在查找时唯一的信息是字符位置我想跳转到。另一方面,seek(long pos) 以字节为单位跳转,所以我没有找到正确的位置,因为 UTF-8 字符可以超过一个字节。

这是我的问题:当我写入文件时,我可以改用 ISO-8859-15 写入它(其中一个字符是一个字节)吗?这样 seek(long pos) 会让我处于正确的位置。或者我应该尝试使用 RandomAccessFile 的替代方法(是否有可以跳转到字符位置的替代方法?)

首先是令人担忧的。 FileWriter 和 FileReader 是旧实用程序 类,它们使用该计算机上的默认平台设置。 运行 在其他地方,该代码将提供不同的文件,将无法从另一个位置读取文件。

ISO-8859-15 是单字节编码。但是 java 以 Unicode 格式保存文本,因此它 可以组合所有脚本。 char 是 UTF-16。通常 char 索引不会是字节索引,但在您的情况下它可能有效。但换行符可能是一个 \n 或两个 \r\n chars/bytes - 取决于平台。

回复

个人认为UTF-8已经很成熟了,也更容易使用:

byte[] bytes = string.getBytes(StandardCharsets.UTF_8);
string = new String(bytes, StandardCharsets.UTF_8);

这样所有特殊报价、欧元等都将始终可用。

至少指定编码:

Files.newBufferedWriter(file.toPath(), "ISO-8859-15");