您用于编写 Python 代码的程序代码编辑器中存在错误的可能性很大,而不是 Pyhton 本身。由于您使用的是 Python-3.x,因此从运行程序的角度来看,变音符号只是一个字符,与任何其他字符一样,应该没有任何问题。
从 cod-editor 的角度来看,存在一些问题,例如在显示某些特殊 unicode 字符时是否提前一个字符,并且"
字符本身可能会显示空间不足 - 当尝试手动更正"
,可以将其乱序放置,使特殊字符实际上位于引用的字符串之外-
您可以通过重新编辑文件来解决问题的事实表明确实发生了这种情况。
避免这种情况的一种方法是放置某些特殊字符 - 特别是具有不同显示规则的字符,然后使用"\uxxxx"
unicode 代码点 unicode 序列进行转义。这将避免您自己或其他人在将来再次编辑您的文件时遇到问题,因为即使我现在可以使用它,编辑器在打开它们时可能会显示错误,并且通过尝试修复它可能会再次破坏语法.
您可以使用网络上的表格或 Python3 的交互式提示来获取每个字符的 unicode 代码点,确保程序的代码部分在任何编辑器中以确定性的方式显示 - (如果您添加变音字符作为注释同一行,它实际上会提高你的代码的可读性——如果它应该由非阿拉伯语的人编辑的话,效果会非常好)
所以,你上面的声明,我用这个片段来提取代码点:
>>> ArEn = {'ا':'A', 'ل':'L', "و": "W", "َ":"a"}
>>> [print (hex(ord(yy)), yy ) for yy in ArEn.keys()]
0x648 و
0x644 ل
0x64e َ
0x627 ا
这允许我像这样声明字典:
ArEn = {
"\u0648": "W", # و
"\u0644": "L", # L
"\u064e": "a", # ۮ
"\u0627": "A", # ا
}
(是的,我在终端上显示字符时遇到了麻烦,就像我说您在获取这些字符时可能在编辑器上遇到的那样 - fatha ("\u064e" - "a") 字符很棘手!:-))
或者,在代码中使用代码点,是使用 Python 的unicode
数据模块来发现,它们使用实际的字符名称 - 这可以进一步提高可读性,也许通过探索unicodedata
你可以发现你甚至不必手动创建这个字典,但使用该模块代替 -
In [16]: [print("\\u{:04x} - '{}' - {}".format(ord(yy), unicodedata.name(yy), yy) ) for yy in ArEn.keys()]
\u0648 - 'ARABIC LETTER WAW' - و
\u0644 - 'ARABIC LETTER LAM' - ل
\u064e - 'ARABIC FATHA' - َ
\u0627 - 'ARABIC LETTER ALEF' - ا
从这些全文名称中,您可以使用以下unicodedata.lookup
功能返回字符:
>>> unicodedata.lookup("ARABIC LETTER LAM")
'ل'
注意: 1) 这需要 Python3 - 对于 Python2,人们可能会尝试为每个字符串添加前缀u""
- 但是使用 Python 3 与这些字符对齐要好得多,因为 unicode 支持是它的一大亮点。2)这还需要一个终端,它对使用“utf-8”编码的unicode字符有很好的支持——我在一个带有“konsole”终端的Linux系统上。在 Windows 上,idle
Python 提示符可能有效,但cmd
Python 提示符无效。