में यूनिडोड का उपयोग कैसे करें मैं टेक्स्ट दस्तावेज़ से सभी गैर-असीसी वर्णों को हटाने का प्रयास कर रहा हूं। मुझे एक पैकेज मिला जो कि ऐसा करना चाहिए, https://pypi.python.org/pypi/Unidecodeपाइथन (3.3)
इसे एक स्ट्रिंग स्वीकार करनी चाहिए और सभी गैर-एसीआई अक्षरों को निकटतम एसीसी चरित्र में परिवर्तित करना चाहिए। मैंने इस मॉड्यूल को आसानी से while (<input>) { $_ = unidecode($_); }
पर कॉल करके आसानी से उपयोग किया था और यह एक पेर्ल मॉड्यूल का सीधा बंदरगाह है, दस्तावेज इंगित करता है कि इसे वही काम करना चाहिए।
मुझे यकीन है कि यह कुछ आसान है, मैं सिर्फ यह जानने के लिए चरित्र और फ़ाइल एन्कोडिंग के बारे में पर्याप्त समझ में नहीं आता हूं। मेरा मूलभूत यूटीएफ -8 में एन्कोड किया गया है (यूसीएस-2LE से परिवर्तित)। समस्या को एन्कोडिंग ज्ञान की कमी और मॉड्यूल की तुलना में गलत तारों को संभालने के साथ और अधिक करना पड़ सकता है, उम्मीद है कि कोई भी क्यों समझा सकता है। मैंने यादृच्छिक रूप से कोड डालने के बिना जो कुछ भी मुझे पता है, मैंने कोशिश की है और अब तक कोई भाग्य नहीं होने वाली त्रुटियों की खोज की है।
यहाँ मेरी अजगर
from unidecode import unidecode
def toascii():
origfile = open(r'C:\log.convert', 'rb')
convertfile = open(r'C:\log.toascii', 'wb')
for line in origfile:
line = unidecode(line)
convertfile.write(line)
origfile.close()
convertfile.close()
toascii();
तो मैं for line in origfile:
लाइन से एक त्रुटि UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 1563: character maps to <undefined>
मिलता है अगर मैं बाइट मोड (origfile = open('file.txt','r'
) में मूल फ़ाइल को खोलने नहीं है।
यदि मैं इसे बाइट मोड 'rb'
में खोलता हूं तो मुझे line = unidecode(line)
लाइन से TypeError: ord() expected string length 1, but int found
मिलता है।
यदि मैं स्ट्रिंग line = unidecode(str(line))
के रूप में लाइन घोषित करता हूं तो यह फ़ाइल को लिख देगा, लेकिन ... सही नहीं है। \r\n'b'\xef\xbb\xbf[ 2013.10.05 16:18:01 ] User_Name > .\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\
यह \ n, \ r, आदि और यूनिकोड वर्णों को उन्हें किसी भी रूप में परिवर्तित करने के बजाय लिख रहा है।
अगर मैं स्ट्रिंग के लिए लाइन में परिवर्तित रूप में ऊपर, और बाइट मोड में convertfile खोलने 'wb'
यह यह एक स्ट्रिंग 'wb'
और unidecode(line)
तो मैं प्राप्त की घोषणा के बिना त्रुटि TypeError: 'str' does not support the buffer interface
अगर मैं बाइट मोड में खोलने देता है TypeError: ord() expected string length 1, but int found
फिर से त्रुटि।
पहली बार कोशिश करें कि यह काम नहीं कर रहा है, मुझे वही समस्याएं मिलती हैं जब मैंने str() का उपयोग किया, यानी मैं '\ r \ n \ xef \ xbb \ xbf' जैसी लाइनों के साथ समाप्त होता हूं। मैं देखूंगा कि मैं उन सुझावों के साथ क्या कर सकता हूं। – BeanBagKing
@ बीनबैंकिंग: 'बी' \ xef \ xbb \ xbf'' आप देखते हैं बाइट्स मान का प्रतिनिधित्व है; इसका मतलब है कि आप 'str (bytevalue)' के परिणामस्वरूप गुजर रहे हैं, इनपुट फ़ाइल से डीकोड किए गए यूनिकोड स्ट्रिंग मान नहीं। –
सही, किसी भी तरह से मेरी मूल फ़ाइल उन मानों के साथ ओवरराइट की गई थी। मुझे अभी भी आपके द्वारा दिए गए कोड के साथ त्रुटियां आ रही हैं, 'यूनिकोडडेकोड एरर:' आकर्षण 'कोडेक स्थिति 1563 में बाइट 0x90 को डीकोड नहीं कर सकता: cha पर रेक्टर मानचित्र। अगर मैं बाइट मोड में फ़ाइल खोलता हूं तो मुझे 'लंबाई 1 की अपेक्षित स्ट्रिंग मिलती है, लेकिन int मिली' क्या यह मेरी मूल फ़ाइल के एन्कोडिंग के साथ एक और मौलिक समस्या हो सकती है? –
BeanBagKing