【问题标题】:opening xls file and saving it as tsv file using java and UTF-16LE to UTF-8 conversion打开 xls 文件并将其保存为 tsv 文件使用 java 和 UTF-16LE 到 UTF-8 转换
【发布时间】:2012-02-20 11:44:59
【问题描述】:

我有两个问题:

有没有办法通过Java打开xls文件并保存为tsv文件? 编辑: 或者有没有办法通过Java把xls文件转成tsv文件?

有没有一种方法可以使用 java 将 UTF-16LE 文件转换为 UTF-8?

谢谢

【问题讨论】:

    标签: java file-io xls tsv


    【解决方案1】:

    我有两个问题:

    在 StackOverflow 上,您应该将其分成两个不同的问题...

    我会回答你的第二个问题:

    有没有一种方法可以将 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 文件的阅读器会被破坏。简单明了。

    如果由于某种原因您正在使用无法处理 BOM 的损坏的 UTF-8 阅读器,那么您可能需要在将其写入磁盘之前从第一个字符串中删除该 BOM。

    这里有更多关于 BOM 的信息:

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

    【讨论】:

      【解决方案2】:

      有一个名为 jexcelapi 的库允许您打开/编辑/保存 .xls 文件。 阅读 .xls 文件后,编写将其输出为 .tsv 的内容并不难。

      【讨论】:

      • 这就是问题所在。当我们使用 jexcelapi 时,没有提供“另存为”的方法。那么还有其他方法吗?
      猜你喜欢
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      相关资源
      最近更新 更多