2019独角兽企业重金招聘Python工程师标准>>>

iconv 中文截断问题的解决方法

今天做了一个采集程序,原理很简单,使用curl方法把对方页面的html获取分析,然后正则提取需要的数据并保存在数据库。

由于对方页面是GB2312编码,而本地使用的是UTF-8编码。因此在采集后需要进行编码转换。

使用了iconv方法进行编码转换

[php] view plain copy 

  1. iconv — 字符串按要求的字符编码来转换

  2. string iconv ( string $in_charset , string $out_charset , string $str )

  3. 将字符串 str 从 in_charset 转换编码到 out_charset 。

转换的方法很简单,直接使用iconv方法就可以了

[php] view plain copy 

  1. <?php

  2. $content = iconv('GB2312', 'UTF-8', $content); // $content为采集到的内容

  3. ?>

试验了几个页面,都能正常采集。但在之后的采集中,有几个页面采集不完整。

一开始考虑是否正则有错,检查后排除此问题。经过排查,发现经过iconv转码后的内容比采集的内容少了一大段。

查看apache log,看到提示:Notice: iconv(): Detected an illegal character in input string。

翻查手册,看到以下说明

如果你在 out_charset 后添加了字符串 //TRANSLIT,将启用转写(transliteration)功能。这个意思是,当一个字符不能被目标字符集所表示时,它可以通过一个或多个形似的字符来近似表达。

如果你添加了字符串 //IGNORE,不能以目标字符集表达的字符将被默默丢弃。 否则, str 从第一个无效字符开始截断并导致一个 E_NOTICE 。

原来iconv遇到不能识别的内容,会从第一个不能识别的字符开始截断,并生成一个E_NOTICE。因此后边的内容被丢弃了。

而在输出字符集后加上//IGNORE则只丢弃不能识别的内容,而不会截断和丢弃后面的内容。

修改程序后一切正常

[php] view plain copy 

  1. <?php

  2. $content = iconv('GB2312', 'UTF-8//IGNORE', $content); // $content为采集到的内容

  3. ?>

Tips:使用iconv时,如果要使用UTF-8编码的,请使用UTF-8而不要使用UTF8,因为UTF8有些服务器会有问题。

转载于:https://my.oschina.net/yonghan/blog/632609

iconv 中文截断问题的解决方法相关推荐

  1. C# .net中cookie值为中文时的乱码解决方法

    C# .net中cookie值为中文时的乱码解决方法 一.cookie的名称或子cookie的名称不能为中文,否则无法获得cookie 这个好办,名称不用中文即可 二.cookie的值为中文时候,取c ...

  2. php gbk json_encode,php中json_encode处理gbk与gb2312中文乱码问题的解决方法

    这篇文章主要介绍了php中json_encode处理gbk与gb2312中文乱码问题的解决方法,需要的朋友可以参考下 本文讲述了php中json_encode处理gbk与gb2312中文乱码问题的解决 ...

  3. php pdo 中文乱码,php pdo oracle中文乱码的快速解决方法

    在/etc/profile.d/简历oracle.sh 内容如下在NLS_LANG设置编码ORACLE_HOME=/usr/lib/oracle/12.1/client64 C_INCLUDE_PAT ...

  4. jquery.ajax的url中传递中文乱码问题的解决方法

    jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuer ...

  5. php函数substr_replace中文乱码的替代解决方法

    php函数substr_replace中文乱码的替代解决方法 参考文章: (1)php函数substr_replace中文乱码的替代解决方法 (2)https://www.cnblogs.com/ty ...

  6. mysql编写中文时变成问号解决方法

    mysql编写中文时变成问号解决方法 参考文章: (1)mysql编写中文时变成问号解决方法 (2)https://www.cnblogs.com/yangzhixue/p/11449525.html ...

  7. Python 中文注释报错解决方法

    Python 中文注释报错解决方法 参考文章: (1)Python 中文注释报错解决方法 (2)https://www.cnblogs.com/cjiong/p/5881983.html 备忘一下.

  8. eclipse中生成的html存在中文乱码问题的解决方法

    eclipse中生成的html存在中文乱码问题的解决方法 参考文章: (1)eclipse中生成的html存在中文乱码问题的解决方法 (2)https://www.cnblogs.com/bug-hu ...

  9. python处理json数据 乱码报错_python操作mysql中文显示乱码的解决方法

    本文实例展示了一个脚本python用来转化表配置数据xml并生成相应的解析代码. 但是在中文编码上出现了乱码,现将解决方法分享出来供大家参考. 具体方法如下: 1. Python文件设置编码 utf- ...

  10. 【已解决】对JSP页面传值中文乱码的简单解决方法

    很多java程序员在日常的工作中总会遇到对JSP页面传值中文乱码的情况,一些朋友由于操作不当,造成了很大的麻烦.本文将为大家讲解关于对JSP页面传值中文乱码的简单解决方法的内容. 方法/步骤 方法一: ...

最新文章

  1. Swift - AppDelegate.swift类中默认方法的介绍
  2. angularJs在线API文档
  3. 从VMware ESX Server 4升级到ESXi 5
  4. 怎样利用超图客户端打点_渗透测试——XSS利用工具BeEF攻击演示
  5. boost--线程同步
  6. JSP作用域与特殊对象
  7. request对象简介和获取客户机信息
  8. Java实现Facebook第三方登录
  9. 大数据预测实战-随机森林预测实战(三)-数据量对结果影响分析
  10. Python:Python全球生态主站,pip安装方法、集成安装方法、文件安装方法、第三方库自动安装脚本
  11. 进程的创建fork vs vfork
  12. java中isprime_Java中的Arcane isPrime方法
  13. BN层的running_mean更新机制
  14. Jetpack-Compose
  15. 华为 M5680t对HGU ONU配置指导
  16. 22岁少年破解史上最严重网络攻击,拯救全球互联网,三个月后却被FBI逮捕……
  17. 如何用LambdaWrapper去实现去重查询
  18. teamview 解除限制使用时间方法(判断长时间使用 会限制使用时间)
  19. 联想小新air13pro重装系统_联想小新Air 13怎么装win10系统|联想小新Air 13用u盘重装win10系统教程-系统城...
  20. Windows下QT设置应用程序(exe)图标、任务栏托盘图标、任务栏窗口图标

热门文章

  1. Atititjs javascript异常处理机制与java异常的转换.js exception process
  2. atitit查询表修改表字段没反应--解锁锁定的表
  3. paip.提高用户体验----增添开始菜单类似360小助手按钮总结
  4. paip.提升效率---给页面程序增加调试功能
  5. Jibun 银行:一家纯网络银行,利用智能手机打开金融服务领域的新天地
  6. Blackrock的思考与启示
  7. 互联网企业:如何建设数据安全体系?
  8. (转)Steve Cohen:重出江湖?(上)
  9. 阿里云张献涛:如何修炼云计算的弹指神通
  10. 从单体迈向Serverless的避坑指南