繁体   English   中英

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

[英]Write non english characters using a RandomAccessFile in java

我正在尝试使用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,我想知道是否还有另一种方法!)

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

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

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

您的意思是希腊字母E(希腊字母大写字母EPSILON)而不是拉丁字母E(拉丁字母大写字母E)?

除了可以工作的writeChars()之外,还有一个将工作的writeUTF8()方法。 代替每个字符写入两个字节,它会使用可变数量的字节,具体取决于字符代码。

文件存储字节。 文本是一个字符序列; 在Java中,一个char是两个字节。 您必须指定许多在字符和字节之间转换的方法之一。 一些方法(例如UTF-8)可以处理任何字符,而其他许多方法只能处理特定的字符子集,例如Latin或Cyrillic。 您必须选择一种字符编码,然后跟踪使用的字符,以便以后可以解码文件。

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

这是编码示例的方式:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM