打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
UTF-8、Unicode、Ansi的互相转换解决方案
UTF-8、Unicode、Ansi的互相转换
*-----------------------------
      by:十豆三
    date:2011-11-15
vfp版本:vfp9.0(SP2 7423)
操作系统:Windows XP(SP3)

Ansi:
    Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件

Unicode:
    Unicode字符串每个字符(汉字、英文字母)都占2个字节,以2个连续的\0结尾,
    NT操作系统内核用的是这种字符串,常被定义为typedef unsigned short wchar_t;
    所以我们有时常会见到什么char*无法转换为unsigned short*之类的错误,其实就是unicode。

UTF8:
    UTF8是Unicode一种压缩形式,英文A在unicode中表示为0x0041,老外觉得这种存储方式太浪费,
    因为浪费了50%的空间,于是就把英文压缩成1个字节,成了utf8编码,但是汉字在utf8中占3个字节,
    显然用做中文不如ansi合算,这就是中国的网页用作ansi编码而老外的网页常用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 函数参数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字节(每个英文和数字占1个字节,每个汉字占2个字节)
=Strtofile(lcStr,'Ansi编码文件.txt')

*-- 生成的 Unicode编码文件.txt:20字节(每个英文、数字及汉字占2个字节,另加上BOM长度2)
=Strtofile(Strconv(lcStr,5),'Unicode编码文件.txt',2)

*--生成的 UTF-8编码文件.txt:18字节(每个英文和数字占1个字节,每个汉字占3个字节)
=Strtofile(Strconv(lcStr,9),'UTF-8编码文件.txt',4)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python读写不同编码txt文件
不用工具让6208C也可以看TXT文件
iconv字符编码转换全攻略
EF BB BF
用ultraedit实现编码转换
Ansi,UTF8,Unicode编码
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服