开发者社区 问答 正文

如果UTF-16字符不在ASCII范围内且不是代理对的一部分,如何将其转换为UTF-8?

如果UTF-16字符不在ASCII范围内且不是代理对的一部分,如何将其转换为UTF-8?

展开
收起
花开富贵111 2024-08-19 09:59:22 80 分享 版权
1 条回答
写回答
取消 提交回答
  • 如果UTF-16字符不在ASCII范围内(即大于等于0x80)且不是代理对的一部分(即不在\uD800到\uDFFF之间),则需要根据字符值的大小,判断在UTF-8中占用2个或3个字节。具体地,如果字符值小于0x800,则占用2个字节;如果字符值大于等于0x800且小于0x10000,则占用3个字节。转换时,需要执行相应的位操作。具体代码为:

    else if (c < 0x800) { 
    // 2 dest, 11 bits 
    dest[dp++] = (byte) (0xc0 | (c >> 6)); 
    dest[dp++] = (byte) (0x80 | (c & 0x3f)); 
    } else { 
    // 3 dest, 16 bits 
    dest[dp++] = (byte) (0xe0 | ((c >> 12))); 
    dest[dp++] = (byte) (0x80 | ((c >> 6) & 0x3f)); 
    dest[dp++] = (byte) (0x80 | (c & 0x3f)); 
    }
    
    2024-08-19 15:51:43
    赞同 展开评论
问答地址: