أين هو "أفضل ASCII لهذا يونيكود" بايثون قاعدة البيانات؟

StackOverflow https://stackoverflow.com/questions/816285

  •  03-07-2019
  •  | 
  •  

سؤال

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

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

المحلول

Unidecode يبدو وكأنه الحل الكامل. كان تحويل نقلت يتوهم أن يقتبس أسكي، الحروف اللاتينية معلمة لغير مختصر وحتى محاولات الترجمة للتعامل مع الشخصيات التي لم يكن لديك مكافئات ASCII. بهذه الطريقة المستخدمين لم يكن لديك لرؤية حفنة من؟ عندما كان لديك لتمرير النص من خلال إرث نظام أسكي 7 بت.

>>> from unidecode import unidecode
>>> print unidecode(u"\u5317\u4EB0")
Bei Jing 

http://www.tablix.org/~avian / بلوق / المحفوظات / 2009/01 / unicode_transliteration_in_python /

نصائح أخرى

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

في أي حال، يمكنك استخدام unicode.translate للتعامل مع علامات الترقيم بدلا من ذلك. يأخذ طريقة translate قاموس من الترتيبية Unicode إلى الترتيبية يونيكود، وبالتالي يمكنك إنشاء التعيين الذي يترجم يونيكود فقط علامات الترقيم إلى ASCII متوافق مع علامات الترقيم:

'Maps left and right single and double quotation marks'
'into ASCII single and double quotation marks'
>>> punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 }
>>> teststring = u'\u201Chello, world!\u201D'
>>> teststring.translate(punctuation).encode('ascii', 'ignore')
'"hello, world!"'

ويمكنك إضافة المزيد من تعيينات علامات الترقيم إذا لزم الأمر، لكني لا أعتقد أنك تحتاج بالضرورة للقلق بشأن التعامل مع كل واحد حرف الترقيم يونيكود. إذا كنت <م> قيام بحاجة إلى التعامل مع لهجات وعلامات التشكيل الأخرى، يمكنك الاستمرار في استخدام unicodedata.normalize للتعامل مع تلك الأحرف.

والسؤال للاهتمام.

ساعد

وجوجل لي العثور هذه الصفحة التي descibes استخدام في unicodedata حدة كما يلي:

import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')

وهناك نقاش حول هذا في http://code.activestate.com/recipes/251871/ الذي لديه حل NFKD وبعض الطرق للقيام جدول تحويل، لأشياء مثل ± => +/- وغيرها من أحرف غير أحرف.

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