大家都知道python有2與3兩個分支,除了部份程式語法不同之外,兩個分支對字串物件(string object)的處理更是採取完全不一樣的方式。 當初為了開發四大報爬蟲程式處理中文字 ... ... <看更多>
python繁體中文編碼 在 snippet/python-file-encoding.md at master - GitHub 的推薦與評價
snippet/snippet/docs/python/python-file-encoding.md ... 作用:**统一繁体字编码。 ... 作用:**它解决了中文、日文、朝鲜语等的编码,兼容GBK。 ... <看更多>
python繁體中文編碼 在 如何使用Python 檢測文字檔案的編碼 - 他山教程 的推薦與評價
Chardet 可以檢測以下編碼:. ASCII,UTF-8,UTF-16(2 種變體),UTF-32(4 種變體); Big5,GB2312,EUC-TW,HZ-GB-2312,ISO-2022-CN(繁體中文和 ... ... <看更多>
python繁體中文編碼 在 Re: [問題] utf8 & cp950 - 看板Python - 批踢踢實業坊 的推薦與評價
※ 引述《sweslo17 (smigo)》之銘言:
: 程式碼:
: https://ideone.com/PFYV3X
我假設你是用了這個 lib https://docs.python-requests.org/en/latest/
Python 本身沒有內建 requests 這個 module
你應該要在原文內提到它的來源
: 使用版本是Python 3.3
: 在win7上執行會出現以下錯誤:
: Traceback (most recent call last):
: File "test.py", line 17, in <module>
: print (response.text.encode('cp950'))
: UnicodeEncodeError: 'cp950' codec can't encode character '\u30fc' in position
: 29222: illegal multibyte sequence
: 有查了一些資料 也知道是編碼的問題
: response.text的型態是str應該已經是utf-8
你的字元編碼概念需要砍掉重練
response.text 在 Python 3 是 str, 所以是 Unicode 序列
它本身沒有編碼概念
推薦閱讀
https://www.csie.ntu.edu.tw/~p92005/Joel/Unicode.html
如果你消化完上面那篇文章, 應該會瞭解到 Unicode 序列本身不可能會有錯誤[*]
所以你的錯誤顯然在 encode
而如果你在上來發問前有進行過基本的嘗試
應該會發現 print(response.text.encode()) 不會發生錯誤
encode 不帶引數時預設是以 UTF-8 字元集進行編碼
所以問題在於你輸入的 Unicode 字元可以被 UTF-8 編碼, 但無法被 CP950 編碼
為什麼會這樣?
CP950 是 Windows 的 Big-5 擴充, 後者則是對 ASCII 的擴充
這些編碼(相對於 UTF-8)的共同點為擁有最大字元寬度
ASCII 是固定 8-bit, Big-5 和 CP950 則是 8 或 16-bit
所以它們可編碼的字元有限
而由於他們是針對(繁體)漢語世界發展的擴充
它們可編碼的字元以英數與繁體中文字符為主
回到你的程式本身
'\u30fc', 亦即 Unicode 字元編號 0x30fc, 是日語片平假名的長音符號
(正式名稱為 KATAKANA-HIRAGANA PROLONGED SOUND MARK)
CP950 不包含日語假名字符, 所以當然無法編碼這個字元
所以會產生你遇到的錯誤
解法?最好的解法就是不要用 CP950, 改用 UTF-8
或者如果你因為某種特殊原因非用 CP950 不可
可以多喂一個引數給 encode
根據 documentation
https://docs.python.org/3/library/stdtypes.html#str.encode
encode 可以接受第二個引數指明當無法編碼某個字元時應採取的行為
預設的 'strict' 會引發你看到的 exception
但其實有其他的選擇
[*] 如果你無法自己理解原因, 我建議你重看文章直到想通為止
: 不知道為什麼還是會出現錯誤??
: 而且在這樣的行況下也無法寫檔 一樣會出現encode錯誤
: 請各位大大幫忙看看Orz.....
--
"問おう、貴方が私のマスターか?"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
... <看更多>