我想要忽略我的xml中的unicode。我愿意在处理输出时以某种方式改变它。
我的python:
import urllib2, os, zipfile
from lxml import etree
doc = etree.XML(item)
docID = "-".join(doc.xpath('//publication-reference/document-id/*/text()'))
target = doc.xpath('//references-cited/citation/nplcit/*/text()')
#target = '-'.join(target).replace('\n-','')
print "docID: {0}\nCitation: {1}\n".format(docID,target)
outFile.write(str(docID) +"|"+ str(target) +"\n")
创建输出:
docID: US-D0607176-S1-20100105
Citation: [u"\u201cThe birth of Lee Min Ho's donuts.\u201d Feb. 25, 2009. Jazzholic. Apr. 22, 2009 <http://www
但如果我尝试在'-'join(target).replace('\n-','')
中添加回来,我会print
和outFile.write
收到此错误:
Traceback (most recent call last):
File "C:\Documents and Settings\mine\Desktop\test_lxml.py", line 77, in <module>
print "docID: {0}\nCitation: {1}\n".format(docID,target)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 0: ordinal not in range(128)
如何忽略unicode,以便target
与outFile.write
串联?
答案 0 :(得分:5)
您收到此错误是因为您有一个字符串,其中包含您尝试使用ascii characterset输出的unicode字符。打印列表时,您将获得列表的“repr”及其中的字符串,从而避免出现问题。
您需要编码为不同的字符集(例如UTF-8),或者在编码时删除或替换无效字符。
我建议阅读Joels The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),然后阅读the Python docs中有关编码和解码字符串的相关章节。
这是一个让你入门的小提示:
print "docID: {0}\nCitation: {1}\n".format(docID.encode("UTF-8"),
target.encode("UTF-8"))
答案 1 :(得分:1)
print "docID: {0}\nCitation: {1}\n".format(docID.encode("utf-8"), target.encode("utf-8"))
所有不是ASCII字符集的字符都将显示为十六进制转义序列:例如,“\ u201c”将显示为“\ xe2 \ x80 \ x9c”。如果这是不可接受的,那么你可以 做:
docID = "".join([a if ord(a) < 128 else '.' for a in x])
将用'。'。
替换所有非ASCII字符