【发布时间】: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