如果UTF-16字符不在ASCII范围内且不是代理对的一部分,如何将其转换为UTF-8?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
如果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));
}