簡體   English   中英

打開xls文件並使用Java和UTF-16LE將其另存為tsv文件到UTF-8轉換

[英]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的更多信息,請參見:

http://unicode.org/faq/utf_bom.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM