Re: [問題] 請問一下unicode的問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 18 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章