将字符串编码为DataInput的“modified UTF-8”

时间:2013-09-12 09:08:41

标签: java encoding utf-8 bytearray

我想将String值编码为修改后的UTF-8格式字节。像

这样的东西
byte[] bytes = MagicEncoder.encode(str, "modified UTF-8");
DataInput input = new DataInputStream(new ByteArrayInputStream(bytes));

DataInput的每个read *()方法都必须能够正确读取底层字节。

2 个答案:

答案 0 :(得分:1)

使用DataOutputStream

   ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
   DataOutputStream dataOutputStream = new DataOutputStream(byteOutputStream);
   dataOutputStream.writeUTF("some string to write");
   dataOutputStream.close();

结果可在byteOutputStream.toByteArray()

中找到

答案 1 :(得分:0)

作为信息:

修改的UTF-8编码简单地将通常编码为字节0的空字符U + 0000替换为字节序列C0 80,正常的多字节编码,用于代码> 0x7F的。 (因此正常的UTF-8解码就足够了。)

byte[] originalBytes;
int nulCount = 0;
for (int i = 0; i < originalBytes.length; ++i) {
    if (originalBytes[i] == 0) {
        ++nulCount;
    }
}

byte[] convertedBytes = new byte[originalCount + nulCount];
for (int i = 0, j = 0; i < originalBytes.length; ++i, ++j) {
    convertedBytes[j] = originalBytes[i];
    if (originalBytes[i] == 0) {
        convertedBytes[j] = 0xC0;
        ++j;
        convertedBytes[j] = 0x80;
    }
}

最好使用System.arrayCopy,并检查nulCount == 0。