首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 2.7:如何从shell传入像'café‘这样的参数而不获得’caf‘?

Python 2.7:如何从shell传入像'café‘这样的参数而不获得’caf‘?
EN

Stack Overflow用户
提问于 2012-09-19 18:08:07
回答 1查看 697关注 0票数 2

我有一个从shell获取参数的程序员。此参数将是搜索操作中使用的查询。

如果我传入英文单词(即没有重音等),它就可以正常工作。然而,如果我传入,即'café',我会得到'cafú‘(print sys.argv[1]结果是cafÚ而不是café)。

我认为我可以通过将其转换为Unicode对象来解决这个问题,但我错了。

代码语言:javascript
复制
Q = unicode(sys.argv[1], encoding=sys.stdin.encoding)

我还是能听到“”!我快疯了..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-19 18:17:26

我打赌你用的是Windows,对吧?

代码语言:javascript
复制
>>> a = "café"
>>> a
'caf\x82'
>>> print a
café
>>> a.decode("cp850")                      # DOS codepage 850 --> Unicode
u'caf\xe9'
>>> a.decode("cp850").encode("cp1252")     # DOS 850 --> Unicode --> Windows 1252
'caf\xe9'                                  # identical to Unicode codepoint
>>> print a.decode("cp850").encode("cp1252") # Display a cp1252 string in cp850
cafÚ

使用encoding="cp1252"代替,然后它应该可以工作。

解释:(有一些猜测)

  • cmd窗口使用cp850作为默认代码页。从上面会话的第二行可以明显看出,cp850.
  • It中的0x82 is é似乎是在Windows下启动的Python程序使用cp1252作为它们的标准编码,如上面会话的最后一行所示:é is 0xe9 in cp1252 (就像在Unicode).
  • This中一样,当您将此字符串写入文件时也很明显(默认情况下使用cp1252):

如果我使用f.write(a),我会得到caf,作为我的文件的内容,因为,cp1252中是0x82 )。

如果我做f.write(a.decode("cp850").encode("cp1252")),我会得到café.

启示:在您的环境中找到正确的编码,尽快将所有内容转换为Unicode,使用它,然后转换回您需要的编码。如果要输出到交互式窗口,请使用cp850;如果要输出到文件,请使用cp1252

或者切换到Python3,这会让这一切变得更容易。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12492586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档