使用 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();
现在的问题是这个文件很大,我想(需要)跳进去而不用遍历整个文件。 RandomAccessFile
的 seek(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");
这可能与我的
所以我有一个在我的代码中创建的文件。现在我通过以下代码创建它:
FileWriter fwOne = new FileWriter(wordIndexPath);
BufferedWriter wordIndex = new BufferedWriter(fwOne);
其次是几个
wordIndex.write(wordBuilder.toString()); //that's a StringBuilder
以
结束(经过 while 循环)wordIndex.close();
现在的问题是这个文件很大,我想(需要)跳进去而不用遍历整个文件。 RandomAccessFile
的 seek(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");