c语言八进制转为汉字,将八进制的字符串转化为中文字符串(笨方法)

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

三、代码

importredefsub_str(value):

ls= value.group().split('\\')[1:]

ls= [int(i,8) for i inls]print(ls)try:return bytes(ls).decode('utf8')exceptUnicodeDecodeError:return '!错!'text= re.sub(r'(?:\\\d{3}){3}', sub_str, text) #sub为替换,可以使用函数。

sub的使用:请参见:

https://blog.csdn.net/qq_27061049/article/details/90708624

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值