繁体   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