[原创分享]UTF-8、Unicode、Ansi的互相转换解决方案
[原创分享]UTF-8、Unicode、Ansi的互相转换
------解决方案--------------------
沙发
------解决方案--------------------
收藏
------解决方案--------------------
这个也经常碰到,也有一些字符类型转换的问题正在学习,整理一下再来问!先学习这些,谢谢!
------解决方案--------------------
网上也有Unicode十进制数与汉字之间的转化程序,这个也很好
------解决方案--------------------
谢谢老师的指导。谢谢。
------解决方案--------------------
------解决方案--------------------
可惜vfp不支持unicode字符
------解决方案--------------------
非常好的贴子
------解决方案--------------------
VFP是不支持UNICODE,的确是一大遗憾。但所谓的多语言是指同时显示多种语言,也就是说界面只能同时显示某种语言及英语,如不能同时显示中文、法文。
如果软件要做成多种语言版,可以用配置文件选定、或自动检测OS语言版本,一旦确定了某种语言,把所有的显示内容全是该语言即可。不过这样程序及控件的属性都不能直接用固定文字了,所有文字都该是活动的。
不过及时能用UNICODE,直接支持多语言,程序的编写也是挺麻烦的。
多语言同时显示,这种应用场合的确非常少的。
- 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 文件没有 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,直接支持多语言,程序的编写也是挺麻烦的。
多语言同时显示,这种应用场合的确非常少的。