如何使用C从UTF-16文件映射Unicode代码点
我需要读取以UTF-16编码编写的二进制模式的文件,并将其转换为UNICODE码点。成功地从U+0000..U+FFFF间隔映射代码点没有问题。问题是,从U+10000到U+10FFFF UTF-16编码使用两个片段来形成码点如何使用C从UTF-16文件映射Unicode代码点,c,unicode,utf-16,C,Unicode,Utf 16,我需要读取以UTF-16编码编写的二进制模式的文件,并将其转换为UNICODE码点。成功地从U+0000..U+FFFF间隔映射代码点没有问题。问题是,从U+10000到U+10FFFF UTF-16编码使用两个片段来形成码点 示例:这个火箭“您缺少的搜索词是“代理项对”。请注意,下面的代码没有执行任何错误检查或边界检查 int next_codepoint(uint16_t *text) { int c1 = text[0]; if (c >= 0xd800 &&
示例:这个火箭“您缺少的搜索词是“代理项对”。请注意,下面的代码没有执行任何错误检查或边界检查
int next_codepoint(uint16_t *text) {
int c1 = text[0];
if (c >= 0xd800 && c < 0xdc00) {
int c2 = text[1];
return ((c1 & 0x3ff) << 10) + (c2 & 0x3ff) + 0x10000;
}
return c1;
}
int下一个码点(uint16\u t*text){
int c1=文本[0];
如果(c>=0xd800&&c<0xdc00){
int c2=文本[1];
return((c1&0x3ff)执行代理项对转换,或使用为您执行此操作的库,如iconv libunistring。请参阅:
例如:
这是错误的:“UTF-16编码与从U+0000到U+FFFF的UNICODE码点的数字完全相同”。UTF-16 0xD800到0xDFFF表示UNICODE U+10000。此处的“+0x1000”应为“+0x10000”。