5

whileループでUTF-8文字列のint配列をStringBuilderに変換する方法は? 例:
int 配列: 71, 73, 70, 56, 57, 97, 149, 0, 55, 0, 247...
結果の文字列: GIF89a• €÷€ €€ÀÜÀ¦Êð*?ª*?ÿ ...
行には、ラテン文字、キリル文字、アジア文字、およびさまざまな記号と数字が含まれています

do buffer.append((char)num[++i]);
while((byte)buffer.charAt(buffer.length()-1) != -1);

このメソッドは、すべての非ラテン文字を分類します。

4

2 に答える 2

3

まず、次のように int[] を byte[] に変換します。

    //intArray contains your data...
    byte[] utf8bytes = new byte[intArray.length];
    for(int i = 0; i < intArray.length; i++)
    {
        utf8bytes[i] = (byte) intArray[i];
    }

次に、エンコーディングとして UTF-8 を指定して、バイトから文字列を作成します。

    String asString = new String(utf8bytes, "UTF-8");
于 2012-06-07T20:35:55.460 に答える
0

GIF89a ファイルを 1 バイトあたり 1 つの整数として読み込み、テキスト文字列であるかのように出力します。主な問題は、そのファイル内の整数 (バイト) が実際には意味のあるテキスト文字にマップされないことです。そのため、マッピングがアルファベットの一部のレンダリングに失敗すると、テキスト エンコーディングが指示するものは何でもレンダリングされます (私には多くのように見えます)。ゴミの)。

グラフィック情報は、常にテキストにきれいにマップされるとは限りません。可能なバイト値は 256 あり、1 バイト以上で 1 文字を表すこともありますが、英語のアルファベットには 26 文字しかなく、大文字と小文字で表されます。10 桁の数字といくつかの句読点に加えて、エッセイで一般的に使用される約 80 種類の文字が得られます。残りの 160 文字以上は、制御コード、マルチバイトを使用する信号、または外国語の表示をサポートするために存在する文字へのマッピングです。

そのガベージは、現在の文字セットの有効なバイトから文字へのマッピングに最も近いものです。より良い出力が必要な場合は、文字に関連する何かにマップされるデータを含むファイルを読み取ってみてください。

于 2012-06-07T20:31:23.197 に答える