URL ASCII بسيط الترميز مع Python
-
29-09-2019 - |
سؤال
انظر إلى ذلك:
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
.