2009年9月7日 星期一

編輯器的編碼::Editor's Coding

用Windows的筆記本(Notepad)打om二字, 然後按Enter, 再打個, 存成不同的編碼來看:

ANSI:
6F 6D 0D 0A D4 7B
UTF-8:
EF BB BF 6F 6D 0D 0A E5 94 B5
Unicode(預設是little-endian):
FF FE 6F 00 6D 00 0D 00 0A 00 35 55

* 0D 0A是ASCII的CR LF, Windows用的換行, Unix則用LF, Mac用CR. 所以windows編過的檔案到Linux上常會看到^M的標誌. [LF(Line Feed) 就是換行, CR(Carriage Return)是因為以前用電報機, 換行後還是回到第一格.]
* Unicode編碼開頭的U+FEFF是BOM(byte-order mark), UTF-8的BOM則是EF BB BF 
* 唵的Unocode

Emacs:
C-h C ENTER (看現在的coding)
M-x list-coding-systems (列出全部coding system)
C-x ENTER f coding ENTER (改用coding system)
C-x ENTER c coding ENTER (用coding system來看目前的buffer)

Vim:
" 設定自動轉換為 UTF-8 編碼
set fileencodings=utf-8,big5,euc-jp,gbk,euc-kr,utf-bom,iso8859-1 "在讀寫檔案的編碼
set encoding=utf8
set tenc=utf8
set ff=unix

如果PHP讀到有BOM格式的檔案, 會當成一般字元輸出, 如果用到header()要導向別頁時,就會出現:

Cannot modify header information - headers already sent...的錯誤訊息

沒有留言: