這些天在學習《SQL必知必會》(第5版),用psql導入其中的SQL示例腳本時缺少順序編碼怎么修改缺少順序編碼怎么修改,出現“無效的 "UTF8" 編碼字節順序: 0xff”錯誤。
查了不少資料,才略為搞清楚。
根據////里所講到的和 第13版第3章的內容 3.10 里提到,
: A byte for a
form, the of the of a byte order mark (BOM), if
.
意思是說 包括了byte order mark(BOM)的處理規范。
UTF-8 不需要 BOM,盡管 標準允許在 UTF-8 中使用 BOM。在帶BOM的情況下,UTF8的BOM 是EF BB BF。
先看《SQL必知必會》(第5版)里的文件。
先用vim -b .txt 打開文件。然后輸入:%!xxd命令轉換為十六進制。輸入:%!xxd -r返回原顯示文件。
轉換為十六進制時,我們看到,文件格式為小端序UTF-16,其BOM為FF FE。
現在用iconv命令將文件轉為UTF-8格式。
$cp create.txt c2.txt
$ iconv -f UTF-16 -t UTF-8 c2.txt > c3.txt
用vim -b并轉換為十六進制,結果如下
可以看到,轉換為UTF-8之后,并沒有相應的加上BOM頭。
所以不含 BOM 的 UTF-8 才是標準形式,在 UTF-8 文件中放置 BOM 主要是微軟常見做法。BOM其實是為
UTF-16 和 UTF-32 準備的,微軟在 UTF-8 中使用 BOM 是因為這樣可以把 UTF-8 和 ASCII 等編碼明確區分開,但這樣的文件在 之外的操作系統里會帶來問題。
用iconv命令將.txt轉換為UTF-8之后,就可以用psql導入sql腳本時,不再出現0xff錯誤。