2011-06-02 53 views
2

我已經看到關於此問題的其他線索,但我還沒有看到可幫助我的答案。使用python泡沫響應web服務時的Unicode錯誤

我的問題與上一篇文章中使用「CJ的可怕網絡服務」的人非常相似。

我正在使用python 2.5和suds庫(版本0.4.1)。我通過Web服務請求數據庫中的一些記錄。然後我嘗試打印返回的記錄的一些字段。這些記錄的某些標題包含導致異常的字符。我得到的唯一的例外是:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 39: ordinal not in range(128) 

我的代碼如下所示:(SR是一個服務請求,我從數據庫中檢索記錄的類型)

response = client.service.QuerySRByExample(input_data) 
for sr in response: 
    print sr.SRNumber, sr.Title 

如果我遍歷使用ord(),可以看到有些雙引號字符的代碼點爲8220和8221.這些是導致錯誤的原因(第一個雙引號位於標題字符串的第39位,按照錯誤信息)。

... 114 111 108 108 101 114 32 65 8221 32 43 32 8220 68 67 78 ... 

如果我改用

print sr.SRNumber, sr.Title.encode('ascii', 'ignore') 

我沒有收到錯誤。它只會刪除有問題的字符(任何代碼點> 127)。

有沒有更好的方法來處理這個問題?似乎我應該能夠以某種方式將utf-8雙引號轉換爲ascii雙引號。

該Web服務表示它使用的是utf-8編碼。響應從Web服務後面的第一部分是:

<?xml version="1.0" encoding="UTF-8" ?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 

在另一個線程,一個用戶說,他發現在皁液代碼的東西,並能修復它。我不知道這是否被納入泡沫庫。

任何幫助將不勝感激。

回答

2

這只是無法打印。如果你的終端可以處理utf-8(Mac和最新的Linux),print sr.Title.encode("utf-8")應該可以工作。在Windows上,我認爲你可以用系統代碼頁(可能是cp1252)嘗試編碼 - 但它可能沒有必要的字符。

升級到更新版本的Python可能會有幫助。在2.6和2.7中,我可以打印出unicode字符,而不必做任何特殊的事情。

+0

試用了Python 2.7。同樣的問題。嘗試編碼('cp1252'),現在錯誤消失,雙引號字符被替換爲垂直塊。我如何知道我的系統代碼頁是什麼? – HWG 2011-06-02 23:29:08

+0

如果您的系統語言是英語,則可能是1252.請參閱http://msdn.microsoft.com/en-us/goglobal/bb964654。不過,也許控制檯字體沒有智能引用字符。我不使用Windows,所以我無法幫助。 – 2011-06-02 23:59:41