Как проверить Python, если строка содержит только символы, образуйте только конкретную кодовую страницу?

StackOverflow https://stackoverflow.com/questions/20353716

  •  25-08-2022
  •  | 
  •  

Вопрос

Я знаю, что Python использует исключительно UTF8 для кодирования строк, но что, если мне нужно отправить данные в более старое приложение, которое не является Unicode, и поддерживает только эти символы, которые включены в кодовую страницу Windows, такие как Windows-1251 (Cyril) и т. Д. . Итак, я хочу обнаружить, содержит ли String UTF-8 любой символ, который не мог представить данной кодовой страницей.

Это было полезно?

Решение

Есть LIB для обнаружения кодировки: https://pypi.python.org/pypi/chardet (АВТОМОБИЛЬНЫЕ ДЕТАТНОСТИ САМАНИЯ В ПИТОНЕ. Такой умный, как ваш браузер. Открытый исходный код)

Обнаруживает ...

  • 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 (тайский)

Пример из документов:

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

Другие советы

Где blah ваша строка и ascii Ваша кодировка:

blah = u'\uffff'
try:
    blah.encode('ascii')
except UnicodeEncodeError:
    # nope - can't do it...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top