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


    在爬取抖音的时候,由于抖音序列化使用的是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

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

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

  • 相关阅读:
    Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之字符串类型(string)
    每天一杯C_Visual Studio各个版本的区别和总结
    Python笔记_第一篇_面向过程_第一部分_5.Python数据类型之数字类型(number)
    Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码
    Valid Number @python
    正式进驻博客园
    LCT总结
    LCT总结
    bzoj3229 [Sdoi2008]石子合并(非dp的GarsiaWachs算法)
    bzoj3229 [Sdoi2008]石子合并(非dp的GarsiaWachs算法)
  • 原文地址:https://www.cnblogs.com/ohahastudy/p/11931278.html
Copyright © 2020-2023  润新知