在java中使用RandomAccessFile编写非英文字符

时间:2014-03-10 15:33:09

标签: java character-encoding randomaccessfile

我正在尝试使用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,我想知道是否还有其他办法!)

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

以下是对代码进行编码的方法:

String spanish = "\u00E1\u00E9\u00ED\u00F3\u00FA";
System.out.println(spanish); // prints áéíóú