سؤال

انظر إلى ذلك:

import urllib
print urllib.urlencode(dict(bla='Ã'))

الإخراج هو

bla=%C3%BC

ما أريده بسيطًا ، أريد الإخراج في ASCII بدلاً من UTF-8 ، لذلك أحتاج إلى الإخراج:

bla=%C3

إذا حاولت:

urllib.urlencode(dict(bla='Ã'.decode('iso-8859-1')))

لا تعمل (جميع ملفات Python الخاصة بي هي UTF-8 مشفرة):

'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

في الإنتاج ، يأتي المدخلات أحادية.

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

المحلول 5

شكرا لجميع الحلول. تتقارب جميعكم إلى نفس النقطة. لقد قمت بالفوضى تغيير الرمز الصحيح

.encode('iso-8859-1') 

إلى

.decode('iso-8859-1')

عد إلى .encode ('ISO-8859-1') وهو يعمل.

نصائح أخرى

القي نظرة على Unicode Transliteration في Python:

from unidecode import unidecode
print unidecode(u"\u5317\u4EB0")

# That prints: Bei Jing

في حالتك:

bla='Ã'
print unidecode(bla)
'A'

هذه مكتبة طرف ثالث ، يمكن تثبيتها بسهولة عبر:

$ git clone http://code.zemanta.com/tsolc/git/unidecode
$ cd unidecode
$ python setup.py install

أريد الإخراج في ASCII بدلاً من UTF-8

هذا ليس ASCII ، الذي لا يحتوي على شخصيات تم تعيينه فوق 0x80. أنت تتحدث عن ISO-8859-1 ، أو ربما رمز الصفحة 1252 (ترميز Windows استنادًا إليه).

'Ã'.decode('iso-8859-1')

حسنًا ، هذا يعتمد على الترميز الذي استخدمته لحفظ الحرف Ã في المصدر ، أليس كذلك؟ يبدو أن محرر النصوص قد حفظه كـ UTF-8. (هذا شيء جيد ، لأن الترميزات المحددة المحددة مثل ISO-8859-1 تحتاج إلى الذهاب في أسرع وقت ممكن.)

أخبر Python أن الملف المصدر الذي قمت بحفظه في UTF-8 وفقًا لـ بيب 263:

# coding=utf-8

urllib.quote(u'Ã'.encode('iso-8859-1'))    # -> %C3

أو ، إذا كنت لا تريد هذا المتاعب ، فاستخدم الهروب الخلفي:

urllib.quote(u'\u00C3'.encode('iso-8859-1'))    # -> %C3

على الرغم من أنه في كلتا الحالتين ، يجب أن يستخدم WebApp الحديث UTF-8 لإدخاله بدلاً من ISO-8859-1/CP1252.

عمل جيد جدًا على هذا النحو:

import unicodedata
unicodedata.normalize('NFKD', 'Ã'.decode('UTF-8')).encode('ascii', 'ignore')

إذا كانت إدخالك في الواقع UTF-8 وتريد ISO-8859-1 كمخرجات (وهو ليس ASCII) ما تحتاجه هو:

'ñ'.decode('utf-8').encode('iso-8859-1')

طَرد unihandecode هو

ترجمات US-ASCII لنص Unicode.
نسخة محسنة من Python Unidecode ، وهو Python Port of Text :: Unidecode Perl Module by Sean M. Burke.

pip install Unihandecode

ثم في python

import unihandecode
print(unihandecode.unidecode(u'Ã'))

مطبوعات A.

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