將八進制的字符串轉化為中文字符串(笨方法)


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

 

 

 以上即可以將穿插在英文中的八進制字符串轉化為中文,並用中文替換該八進制字符串。

如果大家有簡便的方法,煩請告知。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM