[英]Correct encoding for XML file read from stdin
考慮到我需要從stdin
讀取XML文件。 如何正確編碼?
目前我只是做
xmlString = sys.stdin.read()
doc = xml.dom.minidom.parseString(xmlString)
顯然, xmlString
並非總是正確地解碼,從而導致字符解釋錯誤。
是否有可能解決此問題,或者我必須“按原樣”使用從stdin
獲得的內容?
編輯:假設通過stdin
提供的文件是帶有正確XML聲明的SVG文件,例如,考慮一下
<?xml version="1.0" encoding="UTF-8">
<svg xmlns="http://www.w3.org/2000/svg">
<desc>ú</desc>
</svg>
這意味着可以使用encoding
屬性來檢測編碼(但是顯然我必須至少讀取第一行),然后,我將不得不使用檢測到的編碼以某種方式調整從stdin
讀取。
在這種情況下,解決方案最簡單。 用
try:
input = sys.stdin.buffer
except AttributeError:
input = sys.stdin
xmlString = input.read()
doc = xml.dom.minidom.parseString(xmlString)
stdin
作為二進制流打開(即未解碼)。 在我的特殊情況下,XML解析器可以很好地自行處理解碼,因此不需要我付出任何努力。
請注意,默認情況下,Python 3以文本模式(已解碼)打開stdin
,但在許多情況下顯然使用錯誤的字符編碼。 因此, buffer
屬性是訪問基礎二進制流所必需的。 異常處理是必需的,因為這是早期版本的Python中的默認行為,並且buffer
屬性不可用。
如果文件編碼每次都可能不同,並且完全未知,則可以使用chardet
庫猜測其編碼。 請注意,它使用一些統計數據來找到最佳匹配,因此並非完美。
如果您知道數據的編碼,則有兩個選擇。 PYTHONIOENCODING
變量 ,或使用str.decode
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.