当前位置: 代码迷 >> VFP >> [原创分享]UTF-8、Unicode、Ansi的互相转换解决方案
  详细解决方案

[原创分享]UTF-8、Unicode、Ansi的互相转换解决方案

热度:7387   发布时间:2013-02-26 00:00:00.0
[原创分享]UTF-8、Unicode、Ansi的互相转换
SQL code
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 文件没有 BOMUnicode 文件的 BOM 为:FF FEUTF-8 文件的 BOM 为:EF BB BF,不过 UTF-8 文件可以有 BOM,也可以没有 BOMlcUtf8Str=Filetostr('UTF-8编码文件.txt')If Left(lcUtf8Str,3)=Chr(0xEF)+Chr(0xBB)+Chr(0xBF)    lcUtf8Str=Substr(lcUtf8Str,4)    && 去掉 UTF-8 的 BOMEndif*-- 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 的 BOMEndif*-- 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)


------解决方案--------------------------------------------------------
沙发



------解决方案--------------------------------------------------------
收藏

------解决方案--------------------------------------------------------
这个也经常碰到,也有一些字符类型转换的问题正在学习,整理一下再来问!先学习这些,谢谢!
------解决方案--------------------------------------------------------
网上也有Unicode十进制数与汉字之间的转化程序,这个也很好
------解决方案--------------------------------------------------------
谢谢老师的指导。谢谢。
------解决方案--------------------------------------------------------
探讨
你说的是什么?

------解决方案--------------------------------------------------------
可惜vfp不支持unicode字符
------解决方案--------------------------------------------------------
非常好的贴子
------解决方案--------------------------------------------------------
VFP是不支持UNICODE,的确是一大遗憾。但所谓的多语言是指同时显示多种语言,也就是说界面只能同时显示某种语言及英语,如不能同时显示中文、法文。
如果软件要做成多种语言版,可以用配置文件选定、或自动检测OS语言版本,一旦确定了某种语言,把所有的显示内容全是该语言即可。不过这样程序及控件的属性都不能直接用固定文字了,所有文字都该是活动的。
不过及时能用UNICODE,直接支持多语言,程序的编写也是挺麻烦的。
多语言同时显示,这种应用场合的确非常少的。
  相关解决方案