[英]How to deal with UTF-16LE encoded text file using Java? or convert it to ASCII?
[英]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的更多信息,请参见:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.