Re: [問題] utf8/ansi的判斷?

看板C_and_CPP (C/C++)作者 (霸格尼尼)時間16年前 (2009/08/19 02:06), 編輯推噓1(106)
留言7則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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
thanx!
08/19 02:47, 1F

08/19 13:02, , 2F
utf8 回溯相容於 ansi ,都當 utf8 處理就好了
08/19 13:02, 2F

08/19 13:02, , 3F
當然,記得跳過 BOM
08/19 13:02, 3F

08/19 13:03, , 4F
A ansi text file is also a utf8 text file
08/19 13:03, 4F

08/19 13:31, , 5F
我想他說的ansi是notepad裡面所謂的ansi 也就是locale
08/19 13:31, 5F

08/19 13:31, , 6F
裡面指定的charset/encoding, 在這應該是big5/cp950
08/19 13:31, 6F

08/19 13:31, , 7F
而不是ascii
08/19 13:31, 7F
文章代碼(AID): #1AYkt0s2 (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1AYkt0s2 (C_and_CPP)