簡體   English   中英

Unicode:Python/lxml 文件輸出不符合預期(打印與寫入)

[英]Unicode: Python / lxml file output not as expected (print vs write)

我正在使用以下代碼解析 xml 文件:

import lxml

file_name = input('Enter the file name, including .xml extension: ')
print('Parsing ' + file_name)

from lxml import etree

parser = lxml.etree.XMLParser()


tree = lxml.etree.parse(file_name, parser)
root = tree.getroot()

nsmap = {'xmlns': 'urn:tva:metadata:2010'} 


with open(file_name+'.log', 'w', encoding='utf-8') as f:
    for info in root.xpath('//xmlns:ProgramInformation', namespaces=nsmap):
       crid = (info.get('programId'))
       titlex = (info.find('.//xmlns:Title', namespaces=nsmap))
       title = (titlex.text if titlex != None else 'Missing')
       synopsis1x = (info.find('.//xmlns:Synopsis[1]', namespaces=nsmap))             
       synopsis1 = (synopsis1x.text if synopsis1x != None else 'Missing')               
       synopsis1 = synopsis1.replace('\r','').replace('\n','')
       f.write('{}|{}|{}\n'.format(crid, title, synopsis1))    

讓我們以“Přešité bydlení”的標題為例。 如果我在解析文件時打印標題,它會按預期顯示。 然而,當我把它寫出來時,它顯示為“PÅ™eÅ¡ité bydlenÔ。

我知道這與編碼有關(因為我能夠將打印命令更改為使用 UTF-8,並“損壞”輸出),但是我無法按照我的需要打印輸出。 我查看了編解碼器庫,但不能成功。 在 XML Parser 行中使用 'encoding = "utf-8"' 沒有任何區別。

如何將書面輸出配置為人類可讀?

我以前遇到過各種各樣的麻煩。 但解決方案相當簡單。 文檔中有關於如何以 unicode 讀取和寫入文件的章節。 這個Python talk對理解這個問題也很有啟發。 Unicode 可能很痛苦。 不過,如果您開始使用 python 3,它會變得容易得多。

import codecs
f = codecs.open('test', encoding='utf-8', mode='w+')
f.write(u'\u4500 blah blah blah\n')
f.seek(0)
print repr(f.readline()[:1])
f.close()

你的代碼看起來不錯,所以我認為你的輸入是duff。 假設您正在使用 UTF-8 查看器或 shell 查看輸出文件,那么我懷疑<?xml中的編碼與實際編碼不匹配。

這將解釋為什么打印有效但不能寫入文件。 如果您的外殼/IDE 設置為“ISO-8859-2”並且您的輸入 XML 也是“ISO-8859-2”,那么打印就是推出原始編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM