我有一个(非 python)脚本以某种方式对字符串进行编码,并且我需要一个 python 脚本来使用相同的编码方法。
原始字符串是 Hügelkultur
,原始脚本将其转换为 Hügelkultur
。
现在我的 python 脚本没有进行任何类型的编码,输出文件显示 Hügelkultur
。
如果我运行这个脚本:
string = "Hügelkultur"
string = string.encode()
print(string)
它输出H\xc3\xbcgelkultur
。
我想如何对字符串进行编码才能得到与原始字符串匹配的字符串?
最佳答案
我不知道 stdlib 编码器可以获取该输出,但是带有 xmlcharrefreplace 的 ascii 编码将帮助您完成大部分工作:
>>> "Hügelkultur".encode("ascii", errors="xmlcharrefreplace")
b'Hügelkultur'
#xFC
类似于 #252
,因为 0xfc == 252
,HTML 解码器应该对这两种形式都满意。但是,如果您确实需要精确样式匹配,也许只需编写一个简单的函数来手动执行此操作:
>>> def convert(s):
... chars = []
... for char in s:
... if char.isascii():
... chars.append(char)
... else:
... chars.append(f"&#x{ord(c):X};")
... return "".join(chars)
...
>>> convert("Hügelkultur")
'Hügelkultur'
为了后代的缘故,以另一种方式返回是 html unescape:
>>> import html
>>> html.unescape('Hügelkultur')
'Hügelkultur'
关于使用 &#x**; 的 Python 字符串编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57677341/