Come controllare in Python se una stringa contiene caratteri solo una pagina del codice specifico?

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

  •  25-08-2022
  •  | 
  •  

Domanda

So che Python usa esclusivamente UTF8 per la codifica delle stringhe, ma cosa succede se ho bisogno di inviare dati all'applicazione più vecchia che non è unCode e supporta solo questi caratteri inclusi nella pagina di codice di Windows come Windows-1251 (crylic) ecc. Quindi qui voglio rilevare se la stringa UTF-8 contiene qualsiasi carattere che non potrebbe essere rappresentato dalla pagina del codice fornita.

È stato utile?

Soluzione

C'è Lib per il rilevamento della codifica: https://pypi.python.org/pypi/chardet (Codifica dei caratteri Auto-rilevamento in Python. Intelligente come il tuo browser. Open source)

Rileva ...

  • ASCII, UTF-8, UTF-16 (2 varianti), UTF-32 (4 varianti)
  • BIG5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (cinese tradizionale e semplificato)
  • EUC-JP, Shift_Jis, ISO-2022-JP (giapponese)
  • EUC-KR, ISO-2022-KR (coreano)
  • Koi8-R, Maccyrillic, IBM855, IBM866, ISO-8859-5, Windows-1251 (Cirillico)
  • ISO-8859-2, Windows-1250 (ungherese)
  • ISO-8859-5, Windows-1251 (bulgaro)
  • Windows-1252 (inglese)
  • ISO-8859-7, Windows-1253 (greco)
  • ISO-8859-8, Windows-1255 (ebraico visivo e logico)
  • TIS-620 (thai)

Esempio di documenti:

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

Altri suggerimenti

Dove blah è la tua stringa e ascii è la tua codifica:

blah = u'\uffff'
try:
    blah.encode('ascii')
except UnicodeEncodeError:
    # nope - can't do it...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top