سؤال

لدي مشكلة مع السلاسل التي أحصل عليها من أحد عملائي عبر XMLRPC. يرسل لي سلاسل UTF8 التي يتم ترميزها مرتين :( لذلك عندما أحصل عليها في بيثون لدي كائن يونيكود الذي يجب فك إزعاجه مرة أخرى، ولكن من الواضح أن بيثون لا يسمح بذلك. لقد لاحظت موكلي ولكني أحتاج للقيام بدوارة سريعة الآن قبل إصلاحه.

سلسلة RAW من تفريغ TCP:

<string>Rafa\xc3\x85\xc2\x82</string>

يتم تحويل هذا إلى:

u'Rafa\xc5\x82'

أفضل ما نحصل عليه هو:

eval(repr(u'Rafa\xc5\x82')[1:]).decode("utf8") 

هذا يؤدي إلى السلسلة الصحيحة التي هي:

u'Rafa\u0142' 

ومع ذلك، فإن هذا يعمل قبيح مثل الجحيم ولا يمكن استخدامه في رمز الإنتاج. إذا كان أي شخص يعرف كيفية إصلاح هذه المشكلة بطريقة أكثر ملاءمة، يرجى الكتابة. شكرا كريس

هل كانت مفيدة؟

المحلول

>>> S = U'rafa  XC5  X82 '>>> S.Encode (' raw_unicode_escape '). فك تشفير (' UTF-8 ') U'rafa  U0142' >>>

نصائح أخرى

yow، كان ذلك متعة!

>>> original = "Rafa\xc3\x85\xc2\x82"
>>> first_decode = original.decode('utf-8')
>>> as_chars = ''.join([chr(ord(x)) for x in first_decode])
>>> result = as_chars.decode('utf-8')
>>> result
u'Rafa\u0142'

لذلك يمكنك فك التشفير الأول، والحصول على سلسلة Unicode حيث تكون كل حرف في الواقع قيمة بايت UTF-8. تذهب عبر القيمة العصرية لكل من تلك الأحرف للعودة إلى سلسلة UTF-8 أصيلة، والتي فكزها بشكل طبيعي.

>>> weird = u'Rafa\xc5\x82'
>>> weird.encode('latin1').decode('utf8')
u'Rafa\u0142'
>>>

Latin1 هو مجرد اختصار لطريقة Nuts'n'n'bolts لريشي.

من الغريب جدا أن تحت الموصوف بجدية raw_unicode_escape برنامج الترميز يعطي نفس النتيجة latin1 في هذه الحالة. هل لديهم دائما نفس النتيجة؟ إذا كان الأمر كذلك، لماذا لديك مثل هذا الترميز؟ إذا لم يكن الأمر كذلك، فمن الأفضل أن تعرف بالتأكيد كيف فعل عميل OP بالتحول من 'Rafa\xc5\x82' ل u'Rafa\xc5\x82' ثم إلى عكس هذه العملية بالضبط - وإلا فقد قد نأتي إلعب إذا تم إصلاح خصومات البيانات المختلفة قبل الترميز المزدوج.

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