2 つの質問があります。
Java で xls ファイルを開いて tsv ファイルとして保存する方法はありますか? 編集:または、Java を介して xls ファイルを tsv ファイルに変換する方法はありますか?
Java を使用して UTF-16LE ファイルを UTF-8 に変換する方法はありますか?
ありがとうございました
私は2つの質問があります:
StackOverflowでは、これを2つの異なる質問に分割する必要があります...
私はあなたの2番目の質問に答えます:
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
BOMは、たとえばhexdumpを使用して明確に確認できます。
$ hexdump testOutput.txt -C
00000000 ef bb bf ... (snip)
BOMはUTF-8(ef bb fb)では3バイトでエンコードされますが、UTF-16では2バイトでエンコードされます。UTF16-LEでは、BOMは次のようになります。
$ hexdump testInput.txt -C
00000000 ff fe ... (snip)
UTF-8でエンコードされたファイルには、「BOM」(バイト順マスク)がある場合とない場合(両方とも完全に有効)があることに注意してください。UTF-8ファイルのBOMはそれほどばかげているわけではありません。バイト順序は気にしませんが、テキストファイルがUTF-8でエンコードされていることをすばやく識別するのに役立ちます。BOMを含むUTF-8ファイルは、Unicode仕様に従って完全に合法であるため、BOMで始まるUTF-8ファイルを処理できないリーダーは機能しません。簡潔でシンプル。
何らかの理由で壊れたUTF-8リーダーでBOMに対処できない場合は、ディスクに書き込む前に最初の文字列からBOMを削除することをお勧めします。
BOMの詳細については、こちらをご覧ください。
.xls ファイルを開いたり、編集したり、保存したりできるjexcelapiというライブラリがあります。.xls ファイルを読み込めば、それを .tsv として出力するものを書くのは難しくありません。