我想获得一个unicode版本的calendar.month_abbr [6].如果我没有为语言环境指定编码,我不知道如何将字符串转换为unicode.下面的示例代码显示了我的问题:
>>> import locale >>> import calendar >>> locale.setlocale(locale.LC_ALL,("ru_RU")) 'ru_RU' >>> print repr(calendar.month_abbr[6]) '\xb8\xee\xdd' >>> print repr(calendar.month_abbr[6].decode("utf8")) Traceback (most recent call last): File "<stdin>",line 1,in <module> File "/usr/lib/python2.5/encodings/utf_8.py",line 16,in decode return codecs.utf_8_decode(input,errors,True) UnicodeDecodeError: 'utf8' codec can't decode byte 0xb8 in position 0: unexpected code byte >>> locale.setlocale(locale.LC_ALL,("ru_RU","utf8")) 'ru_RU.UTF8' >>> print repr(calendar.month_abbr[6]) '\xd0\x98\xd1\x8e\xd0\xbd' >>> print repr(calendar.month_abbr[6].decode("utf8")) u'\u0418\u044e\u043d'
解决方法
更改代码中的最后一行:
>>> print calendar.month_abbr[6].decode("utf8") Июн
使用不当的repr()
隐藏你已经得到你需要的东西.
getlocale()也可用于获取当前语言环境的编码:
>>> locale.setlocale(locale.LC_ALL,'en_US') 'en_US' >>> locale.getlocale() ('en_US','ISO8859-1')
另一个可能对您有用的模块:
> PyICU – 更好的国际化方式.虽然locale根据操作系统中的语言环境数据库生成初始或变形的月份名称(因此您不能依赖俄语这样的语言!)并使用一些编码,PyICU具有不同的初始和变形格式说明符(所以你可以在你的情况下选择合适的)并使用unicode.
> pytils – 一套使用俄语的工具,包括日期.它具有硬编码的月份名称作为区域设置限制的解决方法.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。