سؤال

أي الأفكار حول لماذا لا يعمل ؟ اعتقدت حقا "تجاهل" أن تفعل الشيء الصحيح.

>>> 'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 4: ordinal not in range(128)
هل كانت مفيدة؟

المحلول

...هناك سبب انهم يسمى "ترميزات"...

القليل من الديباجة:أعتقد يونيكود مثل القاعدة أو الدولة المثالية.Unicode هي مجرد جدول الأحرف.No 65 اللاتينية رأس المال ألفNo 937 هي العاصمة اليونانية أوميغا.فقط.

في الكمبيوتر لتخزين أو التلاعب Unicode ، يجب أن ترميز إلى بايت.الأكثر مباشرة ترميز Unicode هي UCS-4;كل حرف تحتل 4 بايت, وجميع ~1000000 الأحرف المتاحة.4 بايت تحتوي على عدد من الحرف في يونيكود الجداول 4 بايت عدد صحيح.آخر مفيدة جدا ترميز UTF-8 الذي يمكن ترميز أي حرف Unicode واحد إلى أربعة بايت.ولكن هناك أيضا بعض المحدودة ترميزات ، مثل "latin1" ، والتي تشمل مجموعة محدودة جدا من الشخصيات ، تستخدم في الغالب من قبل الدول الغربية.هذه ترميزات استخدام واحد فقط بايت لكل حرف.

أساسا ، Unicode يمكن المشفرة مع العديد من ترميزات و المشفرة يمكن أن تكون سلاسل فك الشفرة إلى Unicode.الشيء Unicode جاءت في وقت متأخر جدا ، لذلك علينا جميعا أن نشأت باستخدام 8 بت مجموعة الأحرف علمت بعد فوات الأوان أن كل هذا الوقت لقد عملنا مع المشفرة سلاسل.الترميز يمكن ISO8859-1 أو windows CP437 ، أو CP850 ، أو ، أو ، أو ، اعتمادا على النظام الافتراضي.

لذلك عندما, في التعليمات البرمجية المصدر الخاصة بك ، يمكنك إدخال سلسلة "إضافة "رصد" إلى قائمة" (وأعتقد أنك أردت سلسلة "إضافة "رصد" إلى قائمة" لاحظ الاقتباس الثاني) ، في الواقع تستخدم سلسلة بالفعل المشفرة ووفقا النظام الخاص بك الافتراضي الشفرة (قبل بايت \x93 أفترض أنك تستخدم ويندوز الشفرة 1252 "الغربية").إذا كنت ترغب في الحصول على Unicode من ذلك ، تحتاج إلى فك سلسلة من "cp1252" ترميز.

إذا ما كنت من المفترض أن تفعل،:

"add \x93Monitoring\x94 to list".decode("cp1252", "ignore")

من المؤسف أن بيثون 2.x يتضمن .encode طريقة السلاسل أيضا ؛ هذا هو الراحة وظيفة "خاصة" ترميزات ، مثل "الرمز البريدي" أو "rot13" أو "base64" تلك التي لها علاقة مع يونيكود.

على أية حال, كل ما عليك أن تتذكر الخاص بك جيئة وذهابا Unicode التحويلات هي:

  • سلسلة Unicode يحصل المشفرة إلى بيثون 2.x سلسلة (في الواقع سلسلة من البايتات)
  • بيثون 2.x سلسلة يحصل فك الشفرة إلى سلسلة Unicode

وفي كلتا الحالتين تحتاج إلى تحديد ترميز التي سيتم استخدامها.

أنا لست واضحة جدا, أشعر بالنعاس, ولكن آمل المساعدة.

PS روح الدعابة ملاحظة جانبية:المايا لم Unicode.القديمة الرومان الإغريق القدماء المصريين لم جدا.جميعهم كان لديهم الخاصة بهم "ترميزات" ، أي احترام الثقافات الأخرى.كل هذه الحضارات انهارت الغبار.فكروا الناس!جعل التطبيقات الخاصة بك Unicode-علم ، من أجل خير البشرية.:)

PS2 من فضلك لا تفسد الرسالة السابقة بالقول "لكن الصينيين...".إذا كنت تشعر ميلا أو ملزمين بذلك ، على الرغم من تأخير ذلك عن طريق التفكير في أن Unicode BMP سكانها من الصينية الرموز, ولهذا الصيني هو أساس Unicode.أنا يمكن أن تذهب على اختراع الأكاذيب الفاحشة ، طالما الناس وضع Unicode-علم التطبيقات.هتاف!

نصائح أخرى

وترميز متاح للسلاسل يونيكود، ولكن سلسلة لديك هناك لا يبدو يونيكود (محاولة مع u'add \ x93Monitoring \ X93 إلى قائمة ')

>>> u'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
'add \x93Monitoring\x93 to list '

ويبدو أن هذا العمل:

'add \x93Monitoring\x93 to list '.decode('latin-1').encode('latin-1')

وأي قضايا مع ذلك؟ أتساءل متى 'تجاهل'، 'استبدال' ويأتي غير ذلك من معالجة الأخطاء ترميز في؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top