[python] كيف أتحقق مما إذا كانت إحدى السلاسل هي unicode أو ascii؟


Answers

فقط افعل

type(s)

واحد سيقول unicode ، والآخر سيقول str .

يمكنك التعامل معها بشكل منفصل باستخدام isinstance ، على سبيل المثال

if isinstance(s, str):
    print 's is a string object'
elif isinstance(s, unicode):
    print 's is a unicode object'

أو هل تقصد أن لديك شريط ، وتحاول معرفة ما إذا كان يتم ترميزه باستخدام ASCII أو UTF-8 أو أي شيء آخر؟

في هذه الحالة ، جرب هذا:

s.decode('ascii')

إذا كان يثير استثناء ، فإن السلسلة ليست ASCII 100٪.

Question

ماذا علي أن أفعل في بايثون لمعرفة أي ترميز؟




يمكنك استخدام Universal Encoding Detector ، ولكن كن على دراية بأن ذلك سيعطيك أفضل تخمين ، وليس التشفير الفعلي ، لأنه من المستحيل معرفة تشفير سلسلة "abc" على سبيل المثال. ستحتاج إلى الحصول على معلومات الترميز في مكان آخر ، على سبيل المثال يستخدم بروتوكول HTTP عنوان نوع المحتوى لذلك.




Unicode ليس ترميزًا - للإشارة إلى Kumar McMillan:

إذا كانت ASCII و UTF-8 و سلاسل البايت الأخرى هي "نص" ...

... ثم Unicode هو "text-ness"؛

هذا هو الشكل المختصر للنص

احصل على قراءة لميكميلان Unicode In Python ، كلام غير واضح تماما من بيكون 2008 ، فهو يفسر الأمور بشكل أفضل بكثير من معظم الإجابات ذات الصلة على .




استعمال:

import six
if isinstance(obj, six. text_type)

داخل ستة مكتبة ، وهي تمثل:

if PY3:
    string_types = str,
else:
    string_types = basestring,



Links