1

次の10進数のASCII値の配列があります

int[] istr={146,192,128,224,185,152,240,192,6,26,66,72,186,184,88,128,182,40,104,96,36,236,152,128,212,200,64,64,101,252,174,0,96,192,112,24,173,228,200,0,192,128,96,192,144,116,201,48};

これらの値を(ascii / windows-1252)文字としてファイルに書き込みたい。

HOW IT SHOULD LOOK LIKE:    ’À€à¹˜ðÀBHº¸X€¶(h`$였ÔÈ@@eü®
MY OUTPUT:                  ?À?à¹?ðÀBHº¸X?¶(h`$ì??ÔÈ@@eü®

簡単にわかるように、出力には、期待どおりにファイルに表示されない文字がいくつかあります。私のファイルを書き込むコード:

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(output),"windows-1252");
    try {
        for (int c : istr) {
            out.write(c);
        }
    } finally {
        out.close();
    }

では、なぜいくつかの特殊文字が私のファイルに正しく書き込まれないのですか?

4

2 に答える 2

3

電話をかけるときWriter.write(int)は、Unicode値を提供することを意味します。

たとえば、最初の文字を見ると、Unicode 146、別名U+0092があります。U+0080からU+00FFのUnicodeチャートを見ると、それは「私的使用2」の文字です。なぜそれがアポストロフィとして出てくると期待するのかは明らかではありません。

最終的にファイルに入れたい正確なバイトがある場合は、を使用しないでWriterください。単にを使用する必要がありますOutputStream

于 2012-11-16T12:38:49.127 に答える
-2

outputstreamは抽象クラスです。その後、書き込み関数はどのように使用されますか?Excelファイルに漢字を書き込むときに同様の問題が発生します。上記のコードと非常によく似た方法でコードを作成しました。そして、OutputStreamWriter = new OutputStreamWriter(new FileOutputStream(output)、 "utf-8");の代わりに 私は=newOutputStream(new FileOutputStream(output)、 "utf = 8");を使用しました。

私はこの変更でコードを構築することができましたが、Excelの値はまだぎこちないです

于 2012-11-20T11:03:55.060 に答える