UTF-8,、Unicode、Ansi的互相轉換
*----------------------------- by:十豆三 date:2011-11-15 vfp版本:vfp9.0(SP2 7423) 操作系統(tǒng):Windows XP(SP3) Ansi: Ansi字符串我們最熟悉,,英文占一個字節(jié),,漢字2個字節(jié),以一個\0結尾,,常用于txt文本文件 Unicode: Unicode字符串每個字符(漢字,、英文字母)都占2個字節(jié),以2個連續(xù)的\0結尾,, NT操作系統(tǒng)內核用的是這種字符串,,常被定義為typedef unsigned short wchar_t; 所以我們有時常會見到什么char*無法轉換為unsigned short*之類的錯誤,其實就是unicode,。 UTF8: UTF8是Unicode一種壓縮形式,,英文A在unicode中表示為0x0041,老外覺得這種存儲方式太浪費,, 因為浪費了50%的空間,,于是就把英文壓縮成1個字節(jié),成了utf8編碼,,但是漢字在utf8中占3個字節(jié),, 顯然用做中文不如ansi合算,這就是中國的網(wǎng)頁用作ansi編碼而老外的網(wǎng)頁常用utf8的原因,。 簽名BOM:BOM 是 Byte Order Mark 的縮寫,,是編碼方案里用于標識編碼的標準標記。 Ansi 文件沒有 BOM Unicode 文件的 BOM 為:FF FE UTF-8 文件的 BOM 為:EF BB BF,,不過 UTF-8 文件可以有 BOM,也可以沒有 BOM lcUtf8Str=Filetostr('UTF-8編碼文件.txt') If Left(lcUtf8Str,3)=Chr(0xEF)+Chr(0xBB)+Chr(0xBF) lcUtf8Str=Substr(lcUtf8Str,4) && 去掉 UTF-8 的 BOM Endif *-- UTF-8 To Ansi (ANSI文件沒有簽名BOM) =Strtofile(Strconv(lcUtf8Str,11),'Ansi編碼文件.txt') *-- UTF-8 To Unicode (文件頭寫入Unicode文件的BOM) =Strtofile(Strconv(lcUtf8Str,12),'Unicode編碼文件.txt',2) && 多謝 dkfdtf 提醒 Strtofile 函數(shù)參數(shù)3的使用 *------------------------------------------------ lcUnicodeStr=Filetostr('Unicode編碼文件.txt') If Left(lcUnicodeStr,2)=Chr(0xFF)+Chr(0xFE) lcUnicodeStr=Substr(lcUnicodeStr,3) && 去掉 Unicode 的 BOM Endif *-- Unicode To Ansi (ANSI文件沒有簽名BOM) =Strtofile(Strconv(lcUnicodeStr,6),'Ansi編碼文件.txt') *-- Unicode To UTF-8 (文件頭寫入UTF-8文件的BOM) =Strtofile(Strconv(lcUnicodeStr,10),'UTF-8編碼文件.txt',4) *------------------------------------------------ *-- Ansi To UTF-8 (文件頭寫入UTF-8文件的BOM) =Strtofile(Strconv(Filetostr('Ansi編碼文件.txt'),9),'UTF-8編碼文件.txt',4) *-- Ansi To Unicode (文件頭寫入Unicode文件的BOM) =Strtofile(Strconv(Filetostr('Ansi編碼文件.txt'),5),'Unicode編碼文件.txt',2) *------------------------------------------------ lcStr='abc十豆三123' *-- 生成的 Ansi編碼文件.txt:12字節(jié)(每個英文和數(shù)字占1個字節(jié),,每個漢字占2個字節(jié)) =Strtofile(lcStr,'Ansi編碼文件.txt') *-- 生成的 Unicode編碼文件.txt:20字節(jié)(每個英文,、數(shù)字及漢字占2個字節(jié),,另加上BOM長度2) =Strtofile(Strconv(lcStr,5),'Unicode編碼文件.txt',2) *--生成的 UTF-8編碼文件.txt:18字節(jié)(每個英文和數(shù)字占1個字節(jié),每個漢字占3個字節(jié)) =Strtofile(Strconv(lcStr,9),'UTF-8編碼文件.txt',4) |
|
來自: Alkaid2015 > 《75.VFP狐仙◆》