Heim  >  Artikel  >  Backend-Entwicklung  >  在处理中文字符串的时候,如何处理�这个字符

在处理中文字符串的时候,如何处理�这个字符

WBOY
WBOYOriginal
2016-06-06 20:27:442394Durchsuche

在处理一些爬下来的网页时,经常发现会存在这个字符。尝试各种转编码,无果。

比如:

<code>每个人对工� �的使用往往各有偏好</code>

对应的原文是这个:

<code>每个人对工具的使用往往各有偏好</code>

如何处理这样的情况,这又是由于什么问题产生的呢?

如果需要资料,貌似这个可以看看

http://apps.timwhitlock.info/unicode/inspect?s=%EF%BF%BD

回复内容:

在处理一些爬下来的网页时,经常发现会存在这个字符。尝试各种转编码,无果。

比如:

<code>每个人对工� �的使用往往各有偏好</code>

对应的原文是这个:

<code>每个人对工具的使用往往各有偏好</code>

如何处理这样的情况,这又是由于什么问题产生的呢?

如果需要资料,貌似这个可以看看

http://apps.timwhitlock.info/unicode/inspect?s=%EF%BF%BD

从某编码向Unicode编码转化时,如果没有对应的字符,得到的将是Unicode的代码“\uffffd”,也就是这个字符。
这个是你的爬虫根本不识别原网页的编码格式(ASCII或者GB2312等)和压缩格式(Gzip等),全都无脑转成UTF-8字符串导致的,出现这个字符说明转换失败,数据已经丢失了,这个字符本身并没什么实际意义。

如果是PHP的话,这个可能是因为substring导致的。解决办法是安装mb_string模块,使用mb_*系列函数。

有时候一个汉字被截掉一部分会产生这个符号,比如一个两字节的汉子被截掉了一字节,怎么处理我也不知道。。。
你这个应该是‘具’字被分成两部分了。。

<code>public static function utf8Substr($str, $from, $len)
{
    return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
        '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
        '$1',$str);
}</code>

这个问题我估计是因为这段文字在换行的时候被截断了,你扒文字的时候注意看看换行符有没有把一个文字分成两半

可能它就是乱码
你可以用浏览器正常访问一下试试

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn