开发者社区 问答 正文

在UTF-16到UTF-8的转换中,如何处理UTF-16中的代理对(surrogate pair)?

在UTF-16到UTF-8的转换中,如何处理UTF-16中的代理对(surrogate pair)?

展开
收起
花开富贵111 2024-08-19 09:59:22 261 分享 版权
1 条回答
写回答
取消 提交回答
  • 当UTF-16字符在\uD800到\uDFFF范围内时,可能是代理对的一部分。如果第一个字符(高代理项)在\uD800到\uDBFF之间,并且后面紧跟一个字符(低代理项)在\uDC00到\uDFFF之间,则它们组成一个代理对,表示一个Unicode码点。转换时,需要将这两个代理项合并为一个Unicode码点,然后按照UTF-8的4字节格式编码。具体代码为:

    if (c >= '\uD800' && c < '\uE000') { 
    // ...(省略部分代码) 
    uc = (c << 10) + d + 0xfca02400; 
    dest[dp++] = (byte) (0xf0 | ((uc >> 18))); 
    dest[dp++] = (byte) (0x80 | ((uc >> 12) & 0x3f)); 
    dest[dp++] = (byte) (0x80 | ((uc >> 6) & 0x3f)); 
    dest[dp++] = (byte) (0x80 | (uc & 0x3f)); 
    off++; // 跳过低代理项 
    }
    
    2024-08-19 15:51:48
    赞同 1 展开评论
问答地址: