Re: [問題] 請問一下unicode的問題

看板Python作者時間18年前 (2007/01/06 15:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串6/18 (看更多)
※ 引述《pkyosx.bbs@ptt.cc (Insomnia)》之銘言: : ※ 引述《pkyosx (Insomnia)》之銘言: : : 直接用 Ultra Editor Hex進位模式驗證: : : 存檔前: : : => FF FE 11 62 : : 存檔後: 終於發現問題就在於 notepad 存 UTF-8 的時候多存東西上去了!! : : => FF FE FF FE 11 62 : : 但是 notepad 存 unicode(UTF-16), Ultra-Editor 存 UTF-8, UTF-16 都不會有問題 : : => FF FE 11 62 : : 結論: : : 習慣用 notepad 開文件的人小心阿= =" ...TMD 總結一下: BOM on wiki: http://en.wikipedia.org/wiki/Byte_Order_Mark UTF-8 沒有 BE LE 的問題, 所以拿 BOM 只是用來跟其他編碼識別 我用 hexdump 出來是 EF BB BF 用 ultra-editor 看到的卻是 FF FE FF FE 但是用裡面的一個 unicode/ascii/utf8 轉 utf8 (ascii 編輯) 後才變成 EF BB BF 不知道聰明的 Ultra editor 到底做了什麼事情 我猜可能跟編輯的編碼有關 這是另一位板友提供的連結: http://evanjones.ca/python-utf8.html 裡面一小段 code 說出了 python 在處理 utf-8 奇怪的地方 >>> codecs.BOM_UTF16.decode( "utf16" ) u'' >>> codecs.BOM_UTF8.decode( "utf8" ) u'\ufeff' 他的建議是自己在偵測到 utf-8 的時候 手動把 u'\ufeff' 拿掉 import codecs if s.beginswith( codecs.BOM_UTF8 ): # The byte string s begins with the BOM: Do something. # For example, decode the string as UTF-8 if u[0] == unicode( codecs.BOM_UTF8, "utf8" ): # The unicode string begins with the BOM: Do something. # For example, remove the character. # Strip the BOM from the beginning of the Unicode string, if it exists u.lstrip( unicode( codecs.BOM_UTF8, "utf8" ) ) 這是 python 的 bug 嗎? 其實我不確定, 如果有人系統本身是 UTF-8 的可以試試看 搞不好 decode 出來不會多個 FEFF -- ※Post by pky from pkyosx.Dorm-GD2.NCTU.edu 老鼠的香香乳酪洞˙電子佈告欄系統˙alexbbs.twbbs.org˙140.113.166.7
文章代碼(AID): #15dr1q00 (Python)
討論串 (同標題文章)
文章代碼(AID): #15dr1q00 (Python)