1

我正在尝试使用 RandomAccessFile 对象将一些文本写入文件,但非英语字符未正确保存。

具体来说,这句话 --> "und NotenstEnder Libero"

像这样保存 --> "und Notenst•nder Libero"

其中'E'字符不是英文(我认为ascii代码是917)。

我正在使用的代码是这样的:

file = new RandomAccessFile(path, "rw");
...
file.seek(file.length());
file.writeBytes("The data i want");

我怎样才能避免这种情况并写出正确的文字?

(PS:我知道file.writeChars,我想知道是否还有其他方法!)

4

3 回答 3

3

主要问题可能是您的文件编码。您应该使用正确的编码(可能是 UTF-8),例如:

byte[] b = "The data i want".getBytes("UTF-8");
file.write(b);

请注意,如果您使用文本查看器/编辑器来检查文件,则取决于您使用的是哪个文件,您可能必须在文件开头写一个 UTF-8 字节顺序标记或告诉查看器/编辑器如果它无法自行解决,请使用 UTF-8。

于 2014-03-10T15:37:00.497 回答
1

你的意思是希腊字母Ε(GREEK CAPITAL LETTER EPSILON)而不是拉丁字母E(LATIN CAPITAL LETTER E)?

除了可行的方法之外writeChars(),还有一种可行的writeUTF8()方法。不是每个字符写入两个字节,而是使用可变数量的字节,具体取决于字符代码。

文件存储字节。文本是一个字符序列;在 Java 中,achar是两个字节。您必须指定在字符和字节之间进行转换的许多方法中的一种。一些方法,如 UTF-8 处理任何字符,而许多其他方法只处理特定的字符子集,如拉丁文或西里尔文。您必须选择一种字符编码,然后跟踪您使用的内容,以便稍后解码文件。

于 2014-03-10T15:49:28.357 回答
0

您希望您的 Java 代码为 UTF-8。如果使用 unicode \unnnn 对字符进行编码,则可以使用任何 unicode 字符。

以下是您对示例进行编码的方式:

String spanish = "\u00E1\u00E9\u00ED\u00F3\u00FA";
System.out.println(spanish); // prints áéíóú
于 2014-03-10T15:42:24.323 回答