首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串编码为“DataInput的修改后的UTF-8”

将字符串编码为“DataInput的修改后的UTF-8”
EN

Stack Overflow用户
提问于 2013-09-12 09:08:41
回答 2查看 1.6K关注 0票数 0

我想将字符串值编码为修改后的UTF-8格式字节.有点像

代码语言:javascript
复制
byte[] bytes = MagicEncoder.encode(str, "modified UTF-8");
DataInput input = new DataInputStream(new ByteArrayInputStream(bytes));

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-12 09:29:38

使用DataOutputStream

代码语言:javascript
复制
   ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
   DataOutputStream dataOutputStream = new DataOutputStream(byteOutputStream);
   dataOutputStream.writeUTF("some string to write");
   dataOutputStream.close();

结果可在byteOutputStream.toByteArray()中获得

票数 1
EN

Stack Overflow用户

发布于 2013-09-12 09:43:23

As info:

修改后的UTF-8编码简单地取代了nul字符U+0000,通常编码为字节0,作为字节序列C0 80,这是一种正常的多字节编码,用于代码> 0x7F。(因此,正常的UTF-8解码就足够了。)

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18760041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档