0

私はいくつかの文字列 -> バイト -> バイナリ コードをいじりましたが、自分のコードを任意の byte[] 配列で動作させたいのですが、現在は動作するのは ascii だけですか?

中国語は動作しません。

String message =" 汉语";
    playingWithFire(message.getBytes());

while String wow = "WOW..."; 動作します:(すべてのutf-8形式で動作するようにしたいのですが、どうすればそれができるかについての指針はありますか?

//ありがとう

public static byte[] playingWithFire(byte[] bytes){
    byte[] newbytes = null;

        newbytes = new byte[bytes.length];
        for(int i = 0; i < bytes.length; i++){
            String tempStringByte = String.format("%8s", Integer.toBinaryString(bytes[i] & 0xFF)).replace(' ', '0');

            StringBuffer newByteBrf = null;

                newByteBrf = new StringBuffer();
                for(int x = 0; x < tempStringByte.length(); x++){
                    newByteBrf.append(tempStringByte.charAt(x));
                }
                /*short a = Short.parseShort(newByteBrf.toString(), 2);
                ByteBuffer bytesads = ByteBuffer.allocate(2).putShort(a);
                newbytes[i] = bytesads.get();
                cause: java.nio.BufferUnderflowException
                */
                //cause: java.lang.NumberFormatException: Value out of range.
                newbytes[i] = Byte.parseByte(newByteBrf.toString(), 2);

            }
    return newbytes;
}
4

1 に答える 1

0

message.getBytes()あなたのケースでは、コンピューターのデフォルトの文字セットを使用して、中国語の Unicode 文字をバイトに変換しようとしています。西洋の文字セットの場合、間違っているでしょう。

String.getBytes()には別の形式があることに注意してくださいString.getBytes(String)。文字列は、文字列の文字をバイトに変換するために使用される文字エンコーディングの名前です。

タイプはcharUnicode を保持します。このbyte型は、生のビットのみを 8 個のグループで保持します。

したがって、Unicode 文字列を UTF-16 としてエンコードされたバイトに変換するには、次のコードを使用します。

String message =" 汉语";
byte[] utf16Bytes = message.getBytes("utf-16");

使用するエンコードの名前に置き換えます。

同様にnew String(String, byte[])、コンストラクターは、何らかの方法でエンコードされたバイトの配列を受け取ることができ、文字列を指定すると、それらのバイトを Unicode 文字に変換できます。

String例: 上記の utf-16 としてエンコードされたバイトを(Unicodeを含む) に戻すchar場合:

String newMessage = new String(utf16Bytes, "utf-16");

上記の「バイナリコード」の意味がわからないので、これ以上先に進むことはできません。ご覧のとおり、Unicode 文字には、文字を 1 つずつ表すバイナリ コードが内部に含まれています。また、バイト配列には、多バイトから 1 文字への表現で文字を表すバイナリ コードが含まれています。何らかの方法でバイト配列を暗号化する場合は、実績のある標準の暗号化方法と実績のある実証済みの手順を使用して内容を保護します。

于 2013-09-04T21:37:28.157 に答える