[英]How to deal with UTF-16LE encoded text file using Java? or convert it to ASCII?
[英]opening xls file and saving it as tsv file using java and UTF-16LE to UTF-8 conversion
我有兩個問題:
有沒有一種方法可以打開xls文件並通過Java將其另存為tsv文件? 編輯:還是有一種方法可以通過Java將xls文件轉換為tsv文件?
有沒有一種方法可以使用java將UTF-16LE文件轉換為UTF-8?
謝謝
有一個名為jexcelapi的庫,可讓您打開/編輯/保存.xls文件。 讀取.xls文件后,編寫將其輸出為.tsv的文件就變得很容易了。
我有兩個問題:
在StackOverflow上,您應該將其分為兩個不同的問題...
我會回答你的第二個問題:
有沒有一種方法可以使用Java將UTF-16LE文件轉換為UTF-8?
當然是。 還有不止一種方法。
基本上,您想讀取指定輸入編碼(UTF-16LE)的輸入文件,然后寫入指定輸出編碼(UTF-8)的文件。
假設您有一些UTF-16LE編碼的文件:
... $ file testInput.txt
testInput.txt: Little-endian UTF-16 Unicode character data
然后,您基本上可以在Java中執行類似的操作(這只是一個示例:您將要填寫缺少的異常處理代碼,也許不將最后一個換行符放在最后,或者丟棄BOM(如果有),等等):
FileInputStream fis = new FileInputStream(new File("/home/.../testInput.txt") );
InputStreamReader isr = new InputStreamReader( fis, Charset.forName("UTF-16LE") );
BufferedReader br = new BufferedReader( isr );
FileOutputStream fos = new FileOutputStream(new File("/home/.../testOutput.txt"));
OutputStreamWriter osw = new OutputStreamWriter( fos, Charset.forName("UTF-8") );
BufferedWriter bw = new BufferedWriter( osw );
String line = null;
while ( (line = br.readLine()) != null ) {
bw.write(line);
bw.newLine(); // will add an unnecessary newline at the end of your file, fix this
}
bw.flush();
// take care of closing the streams here etc.
這將創建一個UTF-8編碼的文件。
$ file testOutput.txt
testOutput.txt: UTF-8 Unicode (with BOM) text
使用例如hexdump可以清楚地看到BOM表:
$ hexdump testOutput.txt -C
00000000 ef bb bf ... (snip)
BOM在UTF-8(ef bb fb)中的三個字節上進行編碼,而在UTF-16中則在兩個字節上進行編碼。 在UTF16-LE中,BOM如下所示:
$ hexdump testInput.txt -C
00000000 ff fe ... (snip)
請注意,UTF-8編碼的文件可能(也可能不是全部)(都完全有效)具有“ BOM”(字節順序掩碼)。 UTF-8文件中的BOM並不是那么愚蠢:您不必關心字節順序,但是它可以幫助快速識別文本文件為UTF-8編碼。 根據Unicode規范,具有BOM的UTF-8文件是完全合法的,因此無法處理以BOM開頭的UTF-8文件的閱讀器會損壞。 干凈利落。
如果出於某種原因您正在使用損壞的UTF-8閱讀器來處理BOM,那么您可能需要先將第一個String中的BOM刪除,然后再將其寫入磁盤。
有關BOM的更多信息,請參見:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.