0

UTF8 文字列から変換された 16 進文字列 (sA) があります。16 進文字列 sA を UTF8 文字列に変換すると、ビルド モード (ファイル .jar を実行) でフォーム UI に表示できませんが、実行モードまたはデバッグ モードで実行すると、UTF8 文字列がフォーム UI に表示されます。私は netbeans IDE 7.3.1 を使用しています。以下の私のコード:

public String hexToString(String txtInHex) {
    byte[] txtInByte = new byte[txtInHex.length() / 2];
    int j = 0;
    for (int i = 0; i < txtInHex.length(); i += 2) {
        txtInByte[j++] = Byte.parseByte(txtInHex.substring(i, i + 2), 16);
    }
    return new String(txtInByte);
}

private String asHex(byte[] buf) {
    char[] chars = new char[2 * buf.length];
    for (int i = 0; i < buf.length; ++i) {
        chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4];
        chars[2 * i + 1] = HEX_CHARS[buf[i] & 0x0F];
    }
    return new String(chars);
}
4

2 に答える 2

1

このコードには複数の問題があります。

バイト値の有効な範囲は -128 から 127、または16 進数の-80toであり、これを強制します。メソッドが 2 番目のバイトが 127 より大きい文字を処理する必要がある場合、 でデコードできない文字列が生成されます。7FByte.parseByteasHextoHexString

このasHexメソッドは入力文字の 2 番目のバイトのみを処理するため、最初の 256 文字の Unicode 文字に対してのみ正しく機能し、残りの文字に対して偽の出力を生成します。

このtoHexStringメソッドは、プラットフォーム固有のデフォルト エンコーディングを想定して、バイト配列から文字列をデコードします。データが UTF-8 でエンコードされているはずで、デフォルト エンコーディングが別のものである場合、誤った結果が返されます。

よく知られたテスト済みのライブラリを使用する代わりに、16 進文字列をエンコードおよびデコードするための独自のメソッドを作成しようとしているのはなぜですか?

于 2013-09-25T16:44:59.820 に答える