【问题标题】:How to replace hex value in a string如何替换字符串中的十六进制值
【发布时间】:2019-08-18 02:00:26
【问题描述】:

从平面文件导入数据时,我注意到字符串中嵌入了一些十六进制值(<0x00><0x01>)。

我想用特定字符替换它们,但我无法这样做。删除它们也不起作用。 它在导出的平面文件中的样子:https://i.imgur.com/7MQpoMH.png 另一个例子:https://i.imgur.com/3ZUSGIr.png


这是我尝试过的: (请注意,<0x01> 代表不可编辑的实体。此处无法识别。)

import io
with io.open('1.txt', 'r+', encoding="utf-8") as p:
    s=p.read()
# included in case it bears any significance
import re
import binascii

s = "Some string with hex: <0x01>"

s = s.encode('latin1').decode('utf-8')
# throws e.g.: >>> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 114: invalid start byte

s = re.sub(r'<0x01>', r'.', s)
s = re.sub(r'\\0x01', r'.', s)
s = re.sub(r'\\\\0x01', r'.', s)
s = s.replace('\0x01', '.')
s = s.replace('<0x01>', '.')
s = s.replace('0x01', '.')

或类似的东西,希望在遍历整个字符串时掌握它:

for x in s:
    try:
        base64.encodebytes(x)
        base64.decodebytes(x)
        s.strip(binascii.unhexlify(x))
        s.decode('utf-8')
        s.encode('latin1').decode('utf-8')
    except:
        pass

似乎没有什么可以完成工作。

我希望这些字符可以用我挖掘的方法替换,但事实并非如此。我错过了什么? 注意:我必须保留变音符号 (äöüÄÖÜ)

--编辑:

我可以在导出时首先引入十六进制值吗?如果是这样,有没有办法避免这种情况?

with io.open('out.txt', 'w', encoding="utf-8") as temp:
    temp.write(s)

【问题讨论】:

    标签: python-3.x string encoding utf-8 hex


    【解决方案1】:

    从图像来看,这些实际上是控制字符。 您的编辑器以这种灰色的方式显示它们,使用十六进制表示法向您显示字节的值。 您的数据中没有字符“0x01”,但实际上是一个值为1 的单字节,所以unhexlify 和朋友不会帮忙。

    在 Python 中,这些字符可以使用符号\xHH 和两个十六进制数字以带有转义序列的字符串文字生成。 第一个图像的片段可能等于以下字符串:

    "sich z\x01 B. irgendeine"
    

    您删除它们的尝试很接近。 s = s.replace('\x01', '.') 应该可以工作。

    【讨论】:

    • 是的,做到了……谢谢。仅供参考,我发现我在 re.sub 替换期间自己介绍了这些角色。例如,re.sub('(?&lt;=\w)([,.!?;])(?=\w)', u'\1 ', s) 反向引用了被替换的字符,因此引入了“值为 1 的单字节”。正则表达式模块显然在这方面做得更好:'(?&lt;=\w)\p{;,\.!\?}(?=\w)'。 (通过reference
    • 我认为 re.sub\n 反向引用不会引入控制字符。也就是说,除非您将反向引用拼错为\x01,当然。顺便说一句,如果这个答案解决了您描述的问题,请考虑通过左侧的勾号接受它。
    猜你喜欢
    • 1970-01-01
    • 2018-06-12
    • 2019-07-27
    • 2018-01-22
    • 1970-01-01
    • 2018-11-12
    • 2017-06-16
    • 2013-08-08
    • 2016-08-07
    相关资源
    最近更新 更多