• 将八进制的字符串转化为中文字符串(笨方法)


    在爬取抖音的时候,由于抖音序列化使用的是protobuf,反序列化后,中文显示的是八进制字符串,需要将八进制转化为中文。网上找了好久,没有找到现成的方法,就自己写了一个比较笨的方法。

    一、思路

    源字符串是夹杂着八进制字符串和英文字母的字符串,如:

    "

    ssssssssssssssssfffffffffffffffffffffddddddddddddddddddsssssssssssss\229\156\168\233\169\190sdfsafsasfsddddddddddddd

    "

    以上只是示例,实际上,字符串会很会长。

    而三个八进制字符串代表一个中文字符。所以,我们要先用正则表达式将八进制字符串匹配出来,三个为一组。

    然后将这三个八进制字符串转换为汉字,再将其替换到原文之中。(re.sub())

    二、那么如何将三个八进制字符串转换为数字呢?

    思路是将八进制转换为十进制数字,然后利用bytes将十进制数转换为byte,最后再decode('utf8')即可。

    bytes有一个方法,将一个10进制的列表转换为一个汉字:

    即:

      bytes([232, 174, 176])

    如:

    \229\156\168

    上面是三个八进制字符串

        ls = value.split('\')[1:]  #将8进制字符串分开,放入列表
        ls = [int(i,8) for i in ls]   #将8进制转为10进制
        try:
            return  bytes(ls).decode('utf8')  #将10进制的列表直接转为一个汉字
        except UnicodeDecodeError:   #如果出现编码错误(即不存在该编码),则返回“!错!”
            return '!错!'

    三、代码

    import re
    
    def sub_str(value):
        ls = value.group().split('\')[1:]
        ls = [int(i,8) for i in ls]
        print(ls)
        try:
            return  bytes(ls).decode('utf8')
        except UnicodeDecodeError:
            return '!错!'
    
    text = re.sub(r'(?:\d{3}){3}', sub_str, text) #sub为替换,可以使用函数。
    
    sub的使用:请参见:
    https://blog.csdn.net/qq_27061049/article/details/90708624

     以上即可以将穿插在英文中的八进制字符串转化为中文,并用中文替换该八进制字符串。

    如果大家有简便的方法,烦请告知。

  • 相关阅读:
    WSL2
    坐标系变换
    Python websocket
    PAJ7620 IIC 通信
    Python中assert的使用
    Python中循环的使用
    Linux 生成指定大小文件
    SVN不显示log 显示1970年问题
    阿里云 CS实例 开机自运行脚本文件
    生成UDS安全算法DLL文件
  • 原文地址:https://www.cnblogs.com/ohahastudy/p/11931278.html
Copyright © 2020-2023  润新知