python中的字符串编码

时间:2009-05-01 09:36:24

标签: python unicode codepages

在python中,字符串可以是unicode(utf-16和utf-8)和单字节,具有不同的编码(cp1251,cp1252等)。是否可以检查编码字符串是什么?例如,

time.strftime( "%b" )

将返回文本名称为月份的字符串。在MacOS下,返回的字符串将是utf-16,在Windows下使用英语本地,它将是带有ascii编码的单字节,而在具有非英语语言环境的Windows下,它将通过语言环境的代码页进行编码,例如cp1251。我该如何处理这些字符串?

3 个答案:

答案 0 :(得分:5)

字符串不存储任何编码信息,只需在转换为/从unicode转换或打印到输出设备时指定一个:

import locale
lang, encoding = locale.getdefaultlocale()
mystring = u"blabla"
print mystring.encode(encoding)

UTF-8 不是 unicode,它是unicode到单字节字符串的编码。

最佳做法是在python端使用unicode,使用unicode可逆编码(如UTF-8)存储字符串,并仅为用户输出转换为花哨的语言环境。

答案 1 :(得分:1)

charset编码检测非常复杂。

但是,你的真正目的是什么? 如果你只想重视unicode,只需写下

即可
unicode(time.strftime("%b"))

它应该适用于你上面提到的所有案例:

  • mac os:unicode(unicode) - >的unicode
  • win / eng:unicode(ascii) - >的unicode
  • win / noneng:unicode(some_cp) - >将由本地cp转换 - >的unicode

答案 2 :(得分:1)

如果您在未知编码中有一个相当长的字符串,您可以尝试猜测编码,例如使用https://github.com/dcramer/chardet处的通用编码检测器 - 当然不是万无一失,但有时它猜对了;-)。但是对于非常短的字符串来说,这无济于事。