我需要使用一些特殊字符,例如'מ'。当我将它与另一个简单的角色结合在一起时,发生了奇怪的事情。结果具有相反的顺序。当我执行“ 1” +“מ”并打印时,我可以看到第一个为“מ”,第二个为“ 1”。
我要做的是一些字符串操作,使用该名称保存文件名。
我检查了一些解码或编码方式,但是失败了。
a = 'מ'
print(a.encode('UTF-8'))
b = '1' + a
print(b.encode('utf8').decode('utf8')) # not expected
print(b.startswith('1'))
print(b'\x31\xd7\x9e'.decode('utf8')) # unicode of '1' is 31
为什么会这样?
答案 0 :(得分:1)
这不是因为编码,而是因为Unicode。
您的字符串a
从右到左(根据unicode)
数字1
的首选项从左到右,但不会在从右到左的脚本中从右到左覆盖。
所以字节是正确的顺序(如语义顺序),但是显示将反向,因为它是从右到左的字符串。
您可以用Unicode覆盖订单凋零,或使用markdown(例如HTML元素)覆盖(首选)。
因此:与编码无关,这只是打印从右到左字符的方法。语义应该保持在编码之间。