如何使用Python 2.7将西里尔语音译为拉丁语翻译输出不正确

如何使用Python 2.7将西里尔语音译为拉丁语翻译输出不正确,python,python-2.7,translation,Python,Python 2.7,Translation,我正试图将西里尔语从excel文件翻译成拉丁语。我在自下而上工作,不明白为什么这样做不起作用。 当我尝试翻译一个简单的文本字符串时,Python输出“EEEEE”而不是正确的翻译。我怎样才能修正这个问题,给我正确的翻译??我一整天都在想这个问题 symbols = (u"абвгдеёзийклмнопрстуфхъыьэАБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЬЭ", u"abvgdeezijklmnoprstufh'y'eABVGDEEZIJKLMNOPRSTU

我正试图将西里尔语从excel文件翻译成拉丁语。我在自下而上工作,不明白为什么这样做不起作用。
当我尝试翻译一个简单的文本字符串时,Python输出“EEEEE”而不是正确的翻译。我怎样才能修正这个问题,给我正确的翻译??我一整天都在想这个问题

symbols = (u"абвгдеёзийклмнопрстуфхъыьэАБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЬЭ",
           u"abvgdeezijklmnoprstufh'y'eABVGDEEZIJKLMNOPRSTUFH'Y'E")

tr = {ord(a):ord(b) for a, b in zip(*symbols)}

text = u'Добрый Ден'
print text.translate(tr)

>>EEEEEE EEE
我感谢你的帮助

您的源输入错误。无论您如何输入
源代码
文本
文本,Python都没有读取正确的unicode代码点

相反,我强烈怀疑类似的错误处理程序被设置为
replace
。这将导致Python用问号替换它无法识别的所有代码点。所有西里尔字母输入均视为未识别

因此,翻译图中唯一的代码点是63,即问号,映射到
符号[1]
中的最后一个字符(这是词典理解的预期行为,只有一个唯一键):

同样的问题也适用于
文本
unicode字符串;它也只有问号。翻译映射将每个替换为字母
E

>>> u'?????? ???'.translate({63, 69})
u'EEEEEE EEE'
您需要避免输入西里尔文字字符或修复您的输入方法

在终端中,这是终端(或windows控制台)支持的编解码器的功能。配置正确的代码页(windows)或区域设置(POSIX系统),以输入和输出支持西里尔文的编码(最好是UTF-8)

在Python源文件中,告诉Python关于使用

避免文本意味着使用Unicode转义序列:

symbols = (
    u'\u0430\u0431\u0432\u0433\u0434\u0435\u0451\u0437\u0438\u0439\u043a\u043b\u043c'
    u'\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u044a\u044b\u044c\u044d'
    u'\u0410\u0411\u0412\u0413\u0414\u0415\u0401\u0417\u0418\u0419\u041a\u041b\u041c'
    u'\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u042a\u042b\u042c\u042d',
    u"abvgdeezijklmnoprstufh'y'eABVGDEEZIJKLMNOPRSTUFH'Y'E"
)
tr = {ord(a):ord(b) for a, b in zip(*symbols)}

text = u'\u0414\u043e\u0431\u0440\u044b\u0439 \u0414\u0435\u043d'

print text.translate(tr)
您的源输入错误。无论您如何输入
源代码
文本
文本,Python都没有读取正确的unicode代码点

相反,我强烈怀疑类似的错误处理程序被设置为
replace
。这将导致Python用问号替换它无法识别的所有代码点。所有西里尔字母输入均视为未识别

因此,翻译图中唯一的代码点是63,即问号,映射到
符号[1]
中的最后一个字符(这是词典理解的预期行为,只有一个唯一键):

同样的问题也适用于
文本
unicode字符串;它也只有问号。翻译映射将每个替换为字母
E

>>> u'?????? ???'.translate({63, 69})
u'EEEEEE EEE'
您需要避免输入西里尔文字字符或修复您的输入方法

在终端中,这是终端(或windows控制台)支持的编解码器的功能。配置正确的代码页(windows)或区域设置(POSIX系统),以输入和输出支持西里尔文的编码(最好是UTF-8)

在Python源文件中,告诉Python关于使用

避免文本意味着使用Unicode转义序列:

symbols = (
    u'\u0430\u0431\u0432\u0433\u0434\u0435\u0451\u0437\u0438\u0439\u043a\u043b\u043c'
    u'\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u044a\u044b\u044c\u044d'
    u'\u0410\u0411\u0412\u0413\u0414\u0415\u0401\u0417\u0418\u0419\u041a\u041b\u041c'
    u'\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u042a\u042b\u042c\u042d',
    u"abvgdeezijklmnoprstufh'y'eABVGDEEZIJKLMNOPRSTUFH'Y'E"
)
tr = {ord(a):ord(b) for a, b in zip(*symbols)}

text = u'\u0414\u043e\u0431\u0440\u044b\u0439 \u0414\u0435\u043d'

print text.translate(tr)

这对我来说很好。运行text.translate(tr)(no
print
)时会发生什么?我收到
u'Dobryj Den'
。请不要在代码中粘贴提示和日记。这只会让其他人更难测试。@Marc:不幸的是,这已经成为了一种非常普遍的风格,所以…有一个好的文本编辑器有助于克服它。@martineau我不会启动emacs来测试其他人的代码。@Marcin:我发现当使用适当的Python解释器输出样式时,关于什么是代码和什么是输出的通信大大改进了。然而,这篇文章的格式很奇怪。这对我来说很好。运行text.translate(tr)(no
print
)时会发生什么?我收到
u'Dobryj Den'
。请不要在代码中粘贴提示和日记。这只会让其他人更难测试。@Marc:不幸的是,这已经成为了一种非常普遍的风格,所以…有一个好的文本编辑器有助于克服它。@martineau我不会启动emacs来测试其他人的代码。@Marcin:我发现当使用适当的Python解释器输出样式时,关于什么是代码和什么是输出的通信大大改进了。然而,这篇文章的格式很奇怪。