簡體   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