पायथन 2.6 में SAX पार्सर इसे उलझाने के बिना utf-8 को पार्स करने में सक्षम होना चाहिए। यद्यपि आपने कंटेंटहैंडलर को छोड़ दिया है जिसे आप पार्सर के साथ उपयोग कर रहे हैं, यदि वह सामग्री हैंडलर आपके कंसोल पर किसी भी गैर-असीसी अक्षरों को मुद्रित करने का प्रयास करता है, तो इससे क्रैश हो जाएगा।
<?xml version="1.0" encoding="utf-8"?>
<test>
<name>Champs-Élysées</name>
</test>
और यह पार्स तंत्र:
import xml.sax
class MyHandler(xml.sax.handler.ContentHandler):
def startElement(self, name, attrs):
print "StartElement: %s" % name
def endElement(self, name):
print "EndElement: %s" % name
def characters(self, ch):
#print "Characters: '%s'" % ch
pass
parser = xml.sax.make_parser()
parser.setContentHandler(MyHandler())
for line in open('text.xml', 'r'):
parser.feed(line)
यह ठीक पार्स जाएगा और सामग्री वास्तव में में उच्चारण वर्ण सुरक्षित करेगा
उदाहरण के लिए, मैं इस एक्सएमएल दस्तावेज़ है कहना एक्सएमएल। एकमात्र मुद्दा यह है कि def characters()
में पंक्ति है जिसे मैंने टिप्पणी की है। पाइथन 2.6 में कंसोल में चल रहा है, यह आपके द्वारा देखे जा रहे अपवाद का उत्पादन करेगा क्योंकि प्रिंट फ़ंक्शन को अक्षरों को आउटपुट के लिए एएससीआई में परिवर्तित करना होगा।
एक:
आप 3 संभव समाधान है सुनिश्चित करें कि आपके टर्मिनल यूनिकोड का समर्थन करती है, तो अपने site-packages
में एक sitecustomize.py
प्रविष्टि बना सकते हैं और डिफ़ॉल्ट वर्ण utf-8 के लिए सेट सेट:
आयात sys sys.setdefaultencoding ('utf-8')
दो: टर्मिनल (जीभ में गाल)
के उत्पादन मुद्रित न करें
तीन: ch.encode('ascii', 'replace')
: उत्पादन unicodedata.normalize
का उपयोग कर ascii समकक्ष, या encode
वर्ण पाठ उत्पादन के लिए ASCII करने के लिए गैर-ascii वर्ण परिवर्तित करने के लिए सामान्यीकृत करें। बेशक, इस विधि का उपयोग करके आप पाठ का उचित मूल्यांकन करने में सक्षम नहीं होंगे।
ऊपर विकल्प एक का उपयोग करना, अपने कोड अजगर 2.5 में मेरे लिए ठीक काम किया।
इस में काम किया: उदाहरण के लिए, एक की तरह latin1 साथ इनकोडिंग एक विस्तारित ASCII फ़ाइल को पार्स कर सकते हैं 2.5, भी। –