मेरे पास लापरवाही लैटिन वर्णों के साथ एक यूनिकोड स्ट्रिंग है।लैटिन -1 से एसीआई
n=unicode('Wikipédia, le projet d’encyclopédie','utf-8')
मैं इसे सादे ASCII यानी 'विकिपीडिया, le projet dencyclopedie' है, इसलिए सभी तीव्र/उच्चारण, सेडिला आदि हटा दिया जाना चाहिए
ऐसा करने के लिए सबसे तेज़ तरीका यह के रूप में, क्या है करने के लिए परिवर्तित करना चाहते हैं एक लंबे स्वत: पूर्ण ड्रॉपडाउन सूची
निष्कर्ष मिलान के लिए किया जा करने के लिए आवश्यक: एक के रूप में मेरी मापदंड है गति, Lennart की 'यूनिकोड एन्कोडिंग के लिए रजिस्टर अपनी खुद की त्रुटि हैंडलर/डिकोडिंग' सबसे अच्छा परिणाम (एलेक्स के जवाब देखें), गति देता है अधिक से अधिक सी के रूप में अंतर आगे बढ़ता है हर्स लैटिन हैं।
यहाँ अनुवाद तालिका मैं उपयोग कर रहा हूँ, यह भी संशोधित त्रुटि हैंडलर के रूप में यह
# -*- coding: utf-8 -*-
import codecs
"""
This is more of visual translation also avoiding multiple char translation
e.g. £ may be written as {pound}
"""
latin_dict = {
u"¡": u"!", u"¢": u"c", u"£": u"L", u"¤": u"o", u"¥": u"Y",
u"¦": u"|", u"§": u"S", u"¨": u"`", u"©": u"c", u"ª": u"a",
u"«": u"<<", u"¬": u"-", u"": u"-", u"®": u"R", u"¯": u"-",
u"°": u"o", u"±": u"+-", u"²": u"2", u"³": u"3", u"´": u"'",
u"µ": u"u", u"¶": u"P", u"·": u".", u"¸": u",", u"¹": u"1",
u"º": u"o", u"»": u">>", u"¼": u"1/4", u"½": u"1/2", u"¾": u"3/4",
u"¿": u"?", u"À": u"A", u"Á": u"A", u"Â": u"A", u"Ã": u"A",
u"Ä": u"A", u"Å": u"A", u"Æ": u"Ae", u"Ç": u"C", u"È": u"E",
u"É": u"E", u"Ê": u"E", u"Ë": u"E", u"Ì": u"I", u"Í": u"I",
u"Î": u"I", u"Ï": u"I", u"Ð": u"D", u"Ñ": u"N", u"Ò": u"O",
u"Ó": u"O", u"Ô": u"O", u"Õ": u"O", u"Ö": u"O", u"×": u"*",
u"Ø": u"O", u"Ù": u"U", u"Ú": u"U", u"Û": u"U", u"Ü": u"U",
u"Ý": u"Y", u"Þ": u"p", u"ß": u"b", u"à": u"a", u"á": u"a",
u"â": u"a", u"ã": u"a", u"ä": u"a", u"å": u"a", u"æ": u"ae",
u"ç": u"c", u"è": u"e", u"é": u"e", u"ê": u"e", u"ë": u"e",
u"ì": u"i", u"í": u"i", u"î": u"i", u"ï": u"i", u"ð": u"d",
u"ñ": u"n", u"ò": u"o", u"ó": u"o", u"ô": u"o", u"õ": u"o",
u"ö": u"o", u"÷": u"/", u"ø": u"o", u"ù": u"u", u"ú": u"u",
u"û": u"u", u"ü": u"u", u"ý": u"y", u"þ": u"p", u"ÿ": u"y",
u"’":u"'"}
def latin2ascii(error):
"""
error is protion of text from start to end, we just convert first
hence return error.start+1 instead of error.end
"""
return latin_dict[error.object[error.start]], error.start+1
codecs.register_error('latin2ascii', latin2ascii)
if __name__ == "__main__":
x = u"¼ éíñ§ÐÌëÑ » ¼ ö ® © ’"
print x
print x.encode('ascii', 'latin2ascii')
error.end को क्यों मैं लौट error.start से संयुक्त राष्ट्र एन्कोड चार की पूरी श्रृंखला की देखभाल की जरूरत है error.start + 1
:
लौटाई गई त्रुटि ऑब्जेक्ट कई वर्ण हो सकती है, और हम इनमें से केवल पहले को परिवर्तित करते हैं अगर मैं print error.start, error.end
जोड़ने त्रुटि के लिए हैंडलर उत्पादन
¼ éíñ§ÐÌëÑ » ¼ ö ® © ’
0 1
2 10
3 10
4 10
5 10
6 10
7 10
8 10
9 10
11 12
13 14
15 16
17 18
19 20
21 22
1/4 einSDIeN >> 1/4 o R c '
तो दूसरी पंक्ति हम 2-10 से वर्ण प्राप्त में
है, लेकिन हम परिवर्तित केवल 2 इसलिए लौट 3 जारी रखने के रूप में बिंदु, अगर हम error.end उत्पादन वापसी है
¼ éíñ§ÐÌëÑ » ¼ ö ® © ’
0 1
2 10
11 12
13 14
15 16
17 18
19 20
21 22
1/4 e >> 1/4 o R c '
जैसा कि हम देख सकते हैं कि 2-10 भाग को एक एकल द्वारा प्रतिस्थापित किया गया है। ऑफ-कोर्स एक बार में पूरी रेंज को एन्कोड करने और त्रुटि.एंड वापस करने के लिए तेज़ होगा, लेकिन प्रदर्शन उद्देश्य के लिए मैंने इसे सरल रखा है।
अधिक जानकारी के
मुझे यकीन है कि आप जानते हैं, लेकिन ध्यान रखें कि उपयोगकर्ता को इन एसीआई-फीड तारों को न दिखाएं। एक शब्द का अर्थ पूरी तरह से बदल सकता है जब आप यादृच्छिक रूप से अधिक या कम अक्षरों को बदलते हैं ('ओ' में 'ओ' बनाते हैं और इसी तरह)। – unwind
हाँ यह डिस्प्ले के लिए नहीं है लेकिन टाइपिंग के लिए, हमारे पास एसीआईआई अक्षरों की समस्या के साथ एक ऑन-स्क्रीन कीबोर्ड है, यह उपयोगकर्ता कैसे टाइप करेगा या नहीं, इसलिए यदि टाइप ई है, तो इसे स्ट्रिंग से मेल खाना चाहिए, ई, é, ê आदि –
मैं डॉन ' 'error.end' के लिए' error.start + 1' के प्रतिस्थापन को समझ नहीं आया।क्या आप समझा सकते हैं? दोनों मेरे लिए भी काम करते प्रतीत होते हैं। – gorus