我有两个问题:
有没有办法通过Java打开xls文件并将其保存为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 文件的阅读器会被破坏。干净利落。
如果由于某种原因您正在使用无法处理 BOM 的损坏的 UTF-8 阅读器,那么您可能希望在将其写入磁盘之前从第一个字符串中删除 BOM。
此处有关 BOM 的更多信息: