كيفية التحقق من Python إذا كانت السلسلة تحتوي على أحرف فقط تشكل صفحة رمز محددة؟

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

  •  25-08-2022
  •  | 
  •  

سؤال

أعلم أن Python يستخدم UTF8 فقط لتشفير السلسلة ، ولكن ماذا لو كنت بحاجة إلى إرسال بيانات إلى تطبيق أقدم غير متكبر ويدعم فقط هذه الأحرف المدرجة في صفحة رمز Windows مثل Windows-1251 (Cyrylic) وما إلى ذلك .. . لذا ، أريد هنا اكتشاف ما إذا كانت سلسلة 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 (السيريليك)
  • 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