gpt4 book ai didi

python-3.x - 如何替换字符串中的十六进制值

转载 作者:行者123 更新时间:2023-12-05 05:11:30 25 4
gpt4 key购买 nike

从平面文件导入数据时,我注意到字符串中嵌入了一些十六进制值(<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)

最佳答案

从图像来看,这些实际上是控制字符。您的编辑器以这种变灰的方式显示它们,使用十六进制表示法向您显示字节的值。您的数据中没有字符“0x01”,但实际上是一个值为 1 的字节,所以 unhexlify 和 friend 们将无济于事。

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

"sich z\x01 B. irgendeine"

您已接近移除它们的尝试。s = s.replace('\x01', '.') 应该有效。

关于python-3.x - 如何替换字符串中的十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55378278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com