在這我想澄清個概念,就是大家不要把unicode和utf-8, utf-16, utf-32搞亂了,首先unicode是一套標準的字符集,基本包括了大多數的文字了,可以在這個路徑下載最新的字符表http://www.unicode.org/ ,utf-7,8等都是基于這個字符集的一些編碼算法。在unicode設計的時候把ASCII碼的128個作為unicode的前128個。那么現在最最最流行的也就是UTF-8的編碼了,它的算法思想是:
U-00000000 - U-0000007F: 0xxxxxxx ASCII碼
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
比如我在codeCharts里面找到這個字符?(010e),那么它的UTF-8結果是:
1 0000 1110 -------> 110 00 100 10 001110 C48E 就這么簡單了,有沒有。
這里我還想引入一個庫libiconv,可以說是一個萬能的轉換編碼的工具把,去網站http://www.gnu.org/software/libiconv/ 了解詳情,它目前支持的字符編碼不下30種,常用的都有了。那么有了這個庫以后呢,大家可以在遇到已知輸入多種編碼時,可以用它來轉成一種類型的編碼(utf-8),然后做處理。VCard的解析我就是就是這樣解決的。