如果字符串包含只包含特定代码页的字符,如何检查python?

时间:2013-12-03 14:23:44

标签: python python-3.x encoding

我知道python只使用utf8进行字符串编码,但是如果我需要将数据发送到非unicode的旧应用程序并且仅支持windows代码页中包含的这些字符,如windows-1251(cyrylic)等...所以在这里我想检测utf-8字符串是否包含任何无法通过给定代码页表示的字符。

2 个答案:

答案 0 :(得分:2)

blah是您的字符串,ascii是您的编码:

blah = u'\uffff'
try:
    blah.encode('ascii')
except UnicodeEncodeError:
    # nope - can't do it...

答案 1 :(得分:2)

有用于编码检测的lib:https://pypi.python.org/pypi/chardet Python中的字符编码自动检测。与浏览器一样智能。开源

...检测

  • ASCII,UTF-8,UTF-16(2种变种),UTF-32(4种变种)
  • Big5,GB2312,EUC-TW,HZ-GB-2312,ISO-2022-CN(繁体中文和简体中文)
  • EUC-JP,SHIFT_JIS,ISO-2022-JP(日文)
  • EUC-KR,ISO-2022-KR(韩文)
  • KOI8-R,MacCyrillic,IBM855,IBM866,ISO-8859-5,windows-1251(Cyrillic)
  • ISO-8859-2,windows-1250(匈牙利语)
  • ISO-8859-5,windows-1251(保加利亚语)
  • windows-1252(英文)
  • ISO-8859-7,windows-1253(希腊文)
  • ISO-8859-8,windows-1255(视觉和逻辑希伯来语)
  • TIS-620(泰国语)

来自docs的例子:

>>> import urllib
>>> rawdata = urllib.urlopen('http://yahoo.co.jp/').read()
>>> import chardet
>>> chardet.detect(rawdata)
{'encoding': 'EUC-JP', 'confidence': 0.99}
相关问题