簡體   English   中英

python讀取utf8文本文件問題

[英]python read utf8 text file problem

我在python中有一個有關讀取和打印utf8文本文件的問題。

我有一個utf8編碼的test.txt,沒有BOM。 該文件中包含兩個字符:

大聲

第一個字符“大”是中文,第二個“聲”是日語。 現在,當我使用Ulipad(Python編輯器)運行以下代碼以讀取txt文件並打印這兩個字符時。

import codecs
infile = "C:\\test.txt"

f = codecs.open(infile, "r", "utf-8")
s = f.read()

print(s)

我收到這個錯誤

"UnicodeEncodeError: 'cp950' codec can't encode character '\u58f0' in position 1:
 illegal multibyte sequence"

我發現它是由第二個字符“聲”引起的。

但是,當我使用相同的代碼在python默認GUI IDLE中進行測試時,它可以正常打印兩個字符。 因此,我該如何解決該問題。

我的運行環境是python 3.1,Windows xp繁體中文。

在打印時出現錯誤,原因是:

(1)Ulipad正在打印到sys.stdout,這是舊版MS-DOS命令提示符窗口的標准輸出。 (2)您的繁體中文Windows XP使用cp950編碼,這是big5加上Microsoft的修飾。 (3)您說您的第二個字符是日語,您可能表示它也不是中文,因此在big5 +中不太可能是有效字符。

另一方面,IDLE正在寫入其自己的窗口,並且未綁定到MS-DOS輪盤上:-) ...因此,它可以打印的字符更多。

聲可能是日語,但它也是“聲音”(繁體聲)的簡體中文。 cp950是繁體中文,不支持該簡體字。

由於您使用的是中文版本的Windows,因此您可以將默認代碼頁更改為cp936(統一中文)並查看輸出。

我不熟悉Ulipad,但是嘗試在Windows控制台中運行:

chcp 936

然后運行您的腳本。 如果這不起作用,則可以通過“控制面板”,“區域和語言選項”,“高級”選項卡更改非Unicode程序的默認語言。 這就是我能夠在基於美國英語的Windows上的控制台中打印中文的方式。

更新資料

閱讀有關Ulipad的內容時,它說:

多語言支持當前支持4種語言:英語,西班牙語,簡體中文和繁體中文,可以自動檢測。

也許您可以將自動檢測到的繁體中文替換為簡體中文,這可以選擇支持該特定字符的代碼頁和/或字體。 由於它不支持日語,因此可能仍有某些字符無法正確顯示。

暫無
暫無

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

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