专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > VFP

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

发布时间:2010-05-24 22:03:52 文章来源:www.iduyao.cn 采编人员:星星草
[原创分享]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个字节,以一个结尾,常用于txt文本文件

Unicode:
    Unicode字符串每个字符(汉字、英文字母)都占2个字节,以2个连续的结尾,
    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)


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



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

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

------解决方案--------------------
可惜vfp不支持unicode字符
------解决方案--------------------
非常好的贴子
------解决方案--------------------
VFP是不支持UNICODE,的确是一大遗憾。但所谓的多语言是指同时显示多种语言,也就是说界面只能同时显示某种语言及英语,如不能同时显示中文、法文。
如果软件要做成多种语言版,可以用配置文件选定、或自动检测OS语言版本,一旦确定了某种语言,把所有的显示内容全是该语言即可。不过这样程序及控件的属性都不能直接用固定文字了,所有文字都该是活动的。
不过及时能用UNICODE,直接支持多语言,程序的编写也是挺麻烦的。
多语言同时显示,这种应用场合的确非常少的。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: