【发布时间】:2012-02-20 11:44:59
【问题描述】:
我有两个问题:
有没有办法通过Java打开xls文件并保存为tsv文件? 编辑: 或者有没有办法通过Java把xls文件转成tsv文件?
有没有一种方法可以使用 java 将 UTF-16LE 文件转换为 UTF-8?
谢谢
【问题讨论】:
我有两个问题:
有没有办法通过Java打开xls文件并保存为tsv文件? 编辑: 或者有没有办法通过Java把xls文件转成tsv文件?
有没有一种方法可以使用 java 将 UTF-16LE 文件转换为 UTF-8?
谢谢
【问题讨论】:
我有两个问题:
在 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 的信息:
【讨论】:
有一个名为 jexcelapi 的库允许您打开/编辑/保存 .xls 文件。 阅读 .xls 文件后,编写将其输出为 .tsv 的内容并不难。
【讨论】: