0

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

time.strftime( "%b" )

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

4

3 回答 3

5

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

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

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

最佳实践是在 python 端的任何地方都使用 unicode,使用 UTF-8 等 unicode 可逆编码存储您的字符串,并转换为仅用于用户输出的精美语言环境。

于 2009-05-01T10:19:15.273 回答
1

字符集编码检测非常复杂。

但是,您这样做的真正目的是什么?如果您只想重视使用 unicode,只需编写

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

它应该适用于您上面提到的所有情况:

  • mac os: unicode(unicode) -> unicode
  • win/eng: unicode(ascii) -> unicode
  • win/noneng: unicode(some_cp) -> 会被本地cp转换 -> unicode
于 2009-05-01T09:43:31.677 回答
1

如果您有一个相当长的未知编码字符串,您可以尝试猜测编码,例如使用https://github.com/dcramer/chardet上的通用编码检测器- 当然不是万无一失,但有时它会猜对;-)。但这对非常短的字符串没有多大帮助。

于 2009-05-01T15:26:23.193 回答