关于python报错 'utf-8' codec can't encode characters in position xxxx-xxxx surrogates not allowed

关于python报错 'utf-8' codec can't encode characters in position xxxx-xxxx: surrogates not allowed

  • 错误原因

    关于python报错 'utf-8' codec can't encode characters in position xxxx-xxxx surrogates not allowed_第1张图片

    ​ 这段错误代码的意思是python没有办法对这个字符串利用utf-8进行解码,因为没有合适的字符映射到该编码,大部分问题出现在字符串中存在类似\uD83C\uDF1D这种以\u开头的字符串,python会认为这是一个unicode编码,于是想办法把它解码成一个字符串,但发现编码映射表中没有这样的字符与之对应(可能这个编码是一个emoji表情)

  • 解决办法

    假设含有\u的字符串s,则可以利用

    s.encode(‘utf-8, ‘replace’).decode(‘utf-8)
    

    因为decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;
    如果设置为ignore,则会忽略非法字符;
    如果设置为replace,则会用?取代非法字符;
    如果设置为xmlcharrefreplace,则使用XML的字符引用。

    关于python报错 'utf-8' codec can't encode characters in position xxxx-xxxx surrogates not allowed_第2张图片

    这样就会将出错的地方替换为?,而不是抛出一个UnicodeError异常。

    有什么不足的地方请大家指出,喜欢的请点个赞哦~~

你可能感兴趣的:(关于python报错 'utf-8' codec can't encode characters in position xxxx-xxxx surrogates not allowed)