[英]Reading and Writing Text files with UTF-16LE encoding and Apache Commons IO
我用 Java 編寫了一個應用程序,並用 C# 復制了它。 該應用程序讀取和寫入帶有制表符分隔數據的文本文件,供 HMI 軟件使用。 HMI 軟件需要 UTF 或 ANSI 編碼才能正確顯示度數符號,否則我將只使用 ASCII 似乎工作正常。 C# 應用程序可以毫無問題地打開其中任何一個保存的文件。 java應用程序讀取它保存的文件很完美,但是在讀取用C#保存的文件時出現了一個小問題。 在將文件中的第一個字符解析為和 int 時,它會拋出一個數字格式異常。 該字符始終為“1”。 我已經用 editpadlight 打開了這兩個文件,即使在使用編碼查看時它們看起來也是相同的,並且編碼是 UTF-16LE。 我正在為此絞盡腦汁,任何幫助將不勝感激。
lines = FileUtils.readLines(file, "UTF-16LE");
Integer.parseInt(line[0])
我看不出用 C# 保存的文件和用 Java 保存的文件有什么區別
if(lines.get(0).split("\\t")[0].length() == 2){
lines.set(0, lines.get(0).substring(1));
}
您的.NET代碼可能正在編寫BOM。 兼容的Unicode閱讀器會刪除任何BOM,因為它是元數據,而不是文本數據的一部分。
您的Java代碼明確指定了字節順序
FileUtils.readLines(file, "UTF-16LE");
這有點像Catch-22; 如果源中有BOM,則可以將其讀取為“ UTF-16”。 如果沒有,那么您可以將其讀為“ UTF-16LE”或“ UTF-16BE”。
因此,要么用BOM寫入並在不指定字節順序的情況下讀取它,要么不使用BOM寫入並在指定字節順序的情況下讀取它。
使用BOM:
[C#]
File.WriteAllLines(file, lines, Encoding.Unicode);
[Java]
FileUtils.readLines(file, "UTF-16");
沒有物料清單:
[C#]
File.WriteAllLines(file, lines, new UnicodeEncoding(false));
[Java]
FileUtils.readLines(file, "UTF-16LE");
在我的java代碼中我正常讀取文件,我只是在InputStreamReader中指定了char編碼
File file = new File(fileName);
InputStreamReader fis = new InputStreamReader(new FileInputStream(file), "UTF-16LE");
br = new BufferedReader(fis);
String line = br.readLine();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.