当我在python3中合并两个char时字符串反转

时间:2019-05-24 02:39:38

标签: python-3.x character-encoding

我需要使用一些特殊字符,例如'מ'。当我将它与另一个简单的角色结合在一起时,发生了奇怪的事情。结果具有相反的顺序。当我执行“ 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

为什么会这样?

1 个答案:

答案 0 :(得分:1)

这不是因为编码,而是因为Unicode。

您的字符串a从右到左(根据unicode)

数字1的首选项从左到右,但不会在从右到左的脚本中从右到左覆盖。

所以字节是正确的顺序(如语义顺序),但是显示将反向,因为它是从右到左的字符串。

您可以用Unicode覆盖订单凋零,或使用markdown(例如HTML元素)覆盖(首选)。

因此:与编码无关,这只是打印从右到左字符的方法。语义应该保持在编码之间。