Python中,文本存储的二进制字符转为字符串的问题

文本文件中存储了下列二进制字符:

AAAAOOA0:/TACT/OpenSouce/X0A000/\x8F\x88\x97\x9D\x92\x86IF\x83G\x83\x89\x81[\x8C\x9F\x92m_\x95?W\x8A?\x9D:@00E000

需求:将这些二进制字符串转化为标准字符串。

通常做法:以二进制方式(rb)读取文件内容,再转码。

import os
abs_path = os.getcwd()
path = abs_path + "\\Desktop\\input.txt"
with open(path, 'rb') as rd_stream:
    message = rd_stream.read()
    print("变更前:-----------------")
    print(message)
    cvt_message = message.decode('shift_jis')
    print("变更后:-------------------")
    print(cvt_message)

结果如下:

变更前:-----------------
b'AAAAOOA0:/TACT/OpenSouce/X0A000/\\x8F\\x88\\x97\\x9D\\x92\\x86IF\\x83G\\x83\\x89\\x81[\\x8C\\x9F\\x92m_\\x95?W\\x8A?\\x9D:@00E000'
变更后:-------------------
AAAAOOA0:/TACT/OpenSouce/X0A000/\x8F\x88\x97\x9D\x92\x86IF\x83G\x83\x89\x81[\x8C\x9F\x92m_\x95?W\x8A?\x9D:@00E000

这里出现了很重要的问题:
Python自动将文件中的反斜杠(\)转义成两个反斜杠(\\)了!
导致最后的转码结果不正确。

所以,解决问题的一个关键点就是不让Python自动转义反斜杠!

解决方案:

import os
abs_path = os.getcwd()
path = abs_path + "\\Desktop\\input.txt"
with open(path, 'r', encoding="utf-8") as rd_stream:
    message = rd_stream.read()
    print("変更前:-----------------")
    print(message)
    print("変更後:-------------------")
    import codecs
    # "hex-escape"表示关闭自动转义
    original = codecs.escape_decode(message, 'hex-escape')
    print(original[0].decode("shift_jis", 'ignore'))

输出结果:

変更前:-----------------
AAAAOOA0:/TACT/OpenSouce/X0A000/\x8F\x88\x97\x9D\x92\x86IF\x83G\x83\x89\x81[\x8C\x9F\x92m_\x95?W\x8A?\x9D:@00E000
変更後:-------------------
AAAAOOA0:/TACT/OpenSouce/X0A000/処理中IFエラー検知_?W?:@00E000

问题得以解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值