0

我玩弄了一些 String -> byte -> 二进制代码,我希望我的代码适用于任何 byte[] 数组,目前它只适用于,我不确定 ascii?

中文不工作。

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

而字符串哇=“哇...”;作品:(我希望它适用于所有 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)其中字符串是字符编码的名称,用于将字符串的字符转换为字节。

char类型将保存 Unicode。该byte类型仅包含 8 个一组的原始位。

因此,要将 Unicode 字符串转换为编码为 UTF-16 的字节,您可以使用以下代码:

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

替换您要使用的任何编码的名称。

类似地new String(String, byte[]),构造函数可以采用以某种方式编码的字节数组,并且给定字符串,可以将这些字节转换为 Unicode 字符。

例如:如果您想将上面编码为 utf-16 的那些字节转换回 a String(其中包含 Unicode chars):

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

由于我不知道您上面所说的“二进制代码”是什么意思,所以我不能再进一步了。正如我所看到的,Unicode 字符内部有一个二进制代码,一个接一个地表示字符。字节数组中还有一个二进制代码,它表示具有多字节对一个字符表示的字符。如果您想以某种方式加密字节数组,请使用标准的、经过验证的加密方法和经过验证的、经过时间考验的程序来保护内容。

于 2013-09-04T21:37:28.157 回答