簡體   English   中英

Python中的編碼問題-使用UTF-8時,“ ascii”編解碼器無法編碼字符“ \\ xe3”

[英]Encoding problems in Python - 'ascii' codec can't encode character '\xe3' when using UTF-8

我創建了一個程序來打印一些html內容。 我的源文件在utf-8中,服務器的終端在utf-8中,並且我還使用了:

out = out.encode('utf8')

確保字符鏈在utf8中。 盡管如此,當我在字符串中使用諸如“ã”,“é”之類的字符時,我得到:

UnicodeEncodeError: 'ascii' codec can't encode character '\xe3' in position 84: ordinal not in range(128)

在我看來,打印后:

print("Content-Type: text/html; charset=utf-8 \n\n")

它被迫使用ASCII編碼...但是,我只是不知道會是這種情況。

我猜您應該將文件作為unicode對象讀取,這樣就可能不需要對其進行編碼。

import codecs
file = codecs.open('file.html', 'w', 'utf-8')

非常感謝。

這說明了我如何使用Python 3.4.1解決編碼問題:首先,我在代碼中插入了以下行以檢查輸出編碼:

print(sys.stdout.encoding)

我看到了輸出編碼為:

ANSI_X3.4-1968 -

代表ASCII,不支持'ã','é'等字符。

因此,我刪除了上一行,並在此處插入了這些代碼,以更改這些代碼行的標准輸出編碼

import codecs

if sys.stdout.encoding != 'UTF-8':
    sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer, 'strict')
if sys.stderr.encoding != 'UTF-8':
    sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')

這是我找到信息的地方:

http://www.macfreek.nl/memory/Encoding_of_Python_stdout

PS:每個人都說更改默認編碼不是一個好習慣。 我真的不知道 就我而言,它對我來說很好用,但是我正在構建一個非常小而簡單的Web應用程序。

暫無
暫無

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

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