Re: [問題] utf8/ansi的判斷?
※ 引述《varg (gogogo)》之銘言:
: 有一隻c code需要判斷輸入檔案是ansi/utf8
: 我本來是抓前三個byte用bom的方法去判斷
: 測試也ok
: 但最近測試資料一多 發現有些檔案開頭不見得是ef bb bf
: 例如23 69 66 64 用notepad開他也當作是utf8
: 想請問還有什麼方法可以用來判斷?
: 另外若要做ansi to utf8的動作
: 一定要ansi->unicode->utf8嗎?
: thanx
1.
iconv好像有encoding detect的功能
沒有的話 可以用試轉換的方式
短的資料是有可能同時符合兩種編碼
如果真的要自己來的話
看你所謂的ANSI是什麼 如果是Big5的話
Big5是[\xA0-\xFE][\x40-\x7E]
UTF-8則是
第一個byte 0xxxxxxx 單獨存在 就是ascii啦 (00~7F)
110xxxxx 後接一個byte (C0~DF)
1110xxxx 後接兩個byte (EF~EF)
11110xxx 後接三個byte (F0~F7)
...再下去好像目前不使用
之後的byte都是10xxxxxx (80~BF)
自己照規則判斷囉...
2.
UTF-8是Unicode的那個編號再轉換一下
所以中間還是要經過Unicode
轉換方式就像上面寫的規則
把原本unicode code的bit拆開放在x的位置
要幾個byte選用不同的開頭
wikipedia上面都有寫
3.
用現成的函式處理比較輕鬆...
另外 不要依賴UTF-8的BOM
因為UTF-8是不需要BOM的
都是用big endian在拆bit
標準上也寫明不用BOM
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.231.23
※ 編輯: buganini 來自: 220.135.231.23 (08/19 02:09)
※ 編輯: buganini 來自: 220.135.231.23 (08/19 02:09)
推
08/19 02:47, , 1F
08/19 02:47, 1F
→
08/19 13:02, , 2F
08/19 13:02, 2F
→
08/19 13:02, , 3F
08/19 13:02, 3F
→
08/19 13:03, , 4F
08/19 13:03, 4F
→
08/19 13:31, , 5F
08/19 13:31, 5F
→
08/19 13:31, , 6F
08/19 13:31, 6F
→
08/19 13:31, , 7F
08/19 13:31, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章