相关文章推荐
踢足球的火腿肠  ·  止痛消炎软膏与扶他林软膏哪个好?有何区别?_ ...·  3 月前    · 
直爽的烤红薯  ·  李明源_百度百科·  3 月前    · 
光明磊落的卤蛋  ·  承接北京疏解服饰企业和商户2000余家廊坊云 ...·  4 月前    · 
爱喝酒的雪糕  ·  承德市教育局工作动态承德市教育系统召开大中小 ...·  5 月前    · 
长情的刺猬  ·  Flying Into Every ...·  5 月前    · 
小百科  ›  同时存在unicode-escape和utf-8的解码方法 | Mr. Liu's Tech Blog
utf8
一身肌肉的包子
2 年前

在爬取lc提交代码的时候遇到的一个问题,在爬取到的源码中,符号是采用 unicode-escape 编码的,而其中的中文是采用 utf-8 编码的,正常解码无论怎样都会出现乱码,本文记录下解决办法。

[TOC]

示例

下面是lc第一题爬取的源码,编码为”utf-8”,中文可以正确显示,但是换行符等符号并不能正确显示,因此需要转换。

code = "class Solution:\u000A    def twoSum(self, nums: List[int], target: int) \u002D\u003E List[int]:\u000A        dic \u003D defaultdict(int) # 哈希字典\u000A        for i,num in enumerate(nums):\u000A            if num in dic: return [dic[num],i]\u000A            dic[target\u002Dnum]\u003Di"

正常我们的解码是这样的:

code = code.encode("utf-8").decode("unicode-escape")

这样上面的换行符等就可以正确显示为 \n 等正确的编码,但是原本上面的中文就是 utf-8 了,解码为 unicode-escape 就会出现乱码,输出文件就会像下面的这样。

其实很简单,就是 局部解码 就可以了:

  • 首先利用 正则 表达式找到所有采用 unicode-escape 编码的字符,

  • 然后将其解码再替换原字符串

    code = re.sub(r'(\\u[\s\S]{4})',lambda x:x.group(1).encode("utf-8").decode("unicode-escape"),code)

    再来查看一下我们写入的文件,就没有乱码的情况了。

  •  
    推荐文章
    踢足球的火腿肠  ·  止痛消炎软膏与扶他林软膏哪个好?有何区别?_亮健好药网
    3 月前
    直爽的烤红薯  ·  李明源_百度百科
    3 月前
    光明磊落的卤蛋  ·  承接北京疏解服饰企业和商户2000余家廊坊云裳小镇二期正式投运_津 ...
    4 月前
    爱喝酒的雪糕  ·  承德市教育局工作动态承德市教育系统召开大中小学思政课一体化 ...
    5 月前
    长情的刺猬  ·  Flying Into Every Airport in China, Taiwan, HK & Macau! | 26 ...
    5 月前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    小百科 - 百科知识指南
    © 2024 ~ 沪ICP备11025650号