2

を使用して簡体字の漢字をExcelファイルに書き込もうとしています

OutputStreamWriter(OutputStream out, String charsetName).write(String str,int off,int len);

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file), "UTF-16");
osw.write((vt.get(index)).toString());

しかし、残念ながらこれは機能していません。代わりにジャンク文字が表示されます。誰でもこれについて何か考えがありますか。

これは Excel の問題ですか、それともコード内で修正できますか。

4

1 に答える 1

2

私のバージョンの Excel は中国語に問題があるため、代わりにロシア語を選択することにしました。キリル文字は Unicode に十分に溶け込んでいるため、これを機能させることができれば、中国語を機能させることができるはずです。

あなたのコードは近いですが、2 つの問題があります。

UTF-16 は、ビッグ エンディアンまたはリトル エンディアンのいずれかです。Java charset 名の「UTF-16」は、実際にはビッグ エンディアン エンコーディングの UTF-16 を意味します。Microsoft は、常にリトルエンディアンをデフォルトとして使用します。文字セット「UTF-16LE」を使用する必要があります

ファイルの先頭にバイト オーダー マーク (BOM)を付けて、このエンコーディングを使用していることを Excel に警告する必要があります。2 バイトの 0xFF の後に 0xFE が続くだけです。

これは、「戦争と平和」をロシア語で各単語を別々の列に出力する簡単なプログラムです。結果のファイルは Excel にインポートできます。ロシア語のテキストを中国語のテキストに置き換えるだけです。

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

public class Russian
{
   public static void main(String [] args) throws Exception
   {
      byte [] bom = { (byte) 0xFF, (byte) 0xFE};
      String text = "ВОЙНА,И,МИР";
      FileOutputStream fout = new FileOutputStream("WarAndPeace.csv");
      fout.write(bom);
      OutputStreamWriter out = new OutputStreamWriter(fout, "UTF-16LE");
      out.write(text);
      out.close();;
   }
}
于 2012-11-21T05:31:17.867 に答える