u8国际,u8国际官方网站,u8国际网站最新,u8国际网站,u8国际网址,u8国际链接
由于UTF-8并没有像UTF-16那样从算法上硬性规定某个码位一定按照某个字节长度编码,实际上有些人就可以动歪脑筋了。举例说明,Unicode码位0(空字符)既可以按照00来编码,又可以按照C0 80来编码,还可以按照E0 80 80来编码,还可以按照F0 80 80 80来编码,这就乱套了。一个根本不存在字节00的UTF-8字符串转换为UTF-16或UTF-32字符串之后可能会出现多个0,如果用这种方法藏一些危险代码,如rm -rf /之类的,后果可想而知。所以为了安全性的原因,大多数系统在转码时,都会将超长UTF-8编码视为无效编码。
现在大多数软件都会先将代理对转换为大于00FFFF的扩展平面码位,然后再按四字节编码UTF-8,表现为F0-F4 80-BF 80-BF 80-BF;但是某些软件由于历史原因不能正确识别代理对,或者为了简化算法的原因,它们将代理对中的两个字各转换为两个三字节编码,表现为ED A0-AF 80-BF / ED B0-BF 80-BF。和第四节的情况一样,也乱套了。现在前者被称为标准UTF-8,后者被称为兼容UTF-8或CESU-8。
四个小洞:E0[8-9] ED[A-B] F0[8] F4[9-B]引用评论加载评论中,请稍候...200字以内,仅用于支线交流,主线讨论请采用回复功能。折叠评论张静茹9年3个月前IP:山东7918492楼C#的字符截断很少出现问题,只有在一次字符串里有个很特殊的 占两个char大小的特殊字符 如果把它拆开会出现问题引用评论加载评论中,请稍候...200字以内,仅用于支线交流,主线讨论请采用回复功能。折叠评论acmilan作者9年3个月前IP:四川7918553楼引用 张静茹:
\uFFFD的UTF-8编码是EF BF BD,我们常见的『锟斤拷』就是EF BF BD EF BF BD按照GBK码解码的结果。引用评论加载评论中,请稍候...200字以内,仅用于支线交流,主线讨论请采用回复功能。折叠评论acmilan作者9年1个月前IP:四川7971826楼UTF-8码位图解(t表示尾字节,1表示有一个尾字节,2表示有2个尾字节,3表示有3个尾字节,空白表示非法字节,下边的注解表示下一个尾字节的合法取值范围)
@HASHKFK