如何将波兰语字符作为Python参数输入CMD?

时间:2016-09-29 11:47:50

标签: python python-2.7 cmd diacritics

我刚开始用Python学习编码,我有一个简单的Python程序返回Cześć <input>,其中<input>是用户可以输入CMD的名称,作为此Python程序的参数。如果没有给出输入,它将返回Cześć Świat。它工作正常,但是当我输入名称Łukasz时,它会从Ł中删除警示,程序会返回Cześć Lukasz而不是正确的Cześć Łukasz

在Windows CMD中,我使用CD命令转到包含Python程序的文件夹,然后使用语句hello.py Łukasz执行Python程序。

我的脚本看起来像这样(它最初是来自Google的Python练习(source),我编辑它以使其适用于Python版本2.7的unicode字符,并且例如将'hello'替换为'cześć' ):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

# Define a main() function that prints a little greeting.
    def main():
  # Get the name from the command line, using 'World' as a fallback.
  if len(sys.argv) >= 2:
    name = sys.argv[1].decode('cp1252')
  else:
    name = u'Świat'
  str = u'Cześć '+name
  print str.encode('utf-8')

# This is the standard boilerplate that calls the main() function.
if __name__ == '__main__':
  main()

最初我用sys.argv[1]解码了utf-8,但不知何故,当我使用字母Óó时,它会抛出一个丑陋的异常(见this SO answer)。使用utf-8cp1252导致波兰语字母(例如ĄĆĘŁŃŚŻŹ)被删除重音,但使用{{1}时似乎保持重音的字母Óó除外因为使用cp1252的那个字母导致了前面提到的异常。

所以我的问题是,如何使用CMD中的重音检索字符串以在我的Python程序中使用?

我不会接受建议删除/忽略重音的答案!

1 个答案:

答案 0 :(得分:4)

This is a known limitation of Python 2 in Windowssys.argv不接受Unicode,并且字符被截断为标准ANSI字符页。升级到Python 3将解决您的问题。