C++-uicode字符转UTF-8当中文字符数为奇数时存在乱码
根据utf-8字符编码的特性进行转换,发现当中文字符个数为奇数时,例如:3个中文字符,那么转换为utf-8所占字节数为9,那么显示时按照每个字符2个字节显示,最后多出的一位会被系统默认显示为“?”,传递到网页时就存在了乱码,假如中文字符数为偶数一切正常。 请问大家有什么好的办法可以解决。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
"奇数的汉字会乱码" -- 常见于 用gbk去解utf8字节流. 因为utf8一般3字节, gbk2字节. 所以有这种问题.
参见 @java 乱码, 转码不成功的问题
可以用类似的方法处理。计算长度,
<?
function sutstr_cut($str,$len){
if (strlen($str) <= $len) return $str;
$n = 0;
$tempstr = '';
for ($i=0; $i<$len; $i++) {
if (ord(substr($str,$n,1)) > 224) {
$tempstr .= substr($str,$n,3);
$n += 3;
$i++; //把一个中文按两个英文的长度计算
} elseif (ord(substr($str,$n,1)) > 192) {
$tempstr .= substr($str,$n,2);
$n += 2;
$i++; //把一个中文按两个英文的长度计算
} else {
$tempstr .= substr($str,$n,1);
$n ++;
}
}
return $tempstr.'...';
}
?>