VS2008 用CFile对象读取Unicode文本。

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。



1新建一个记事本文件,输入字符串"0123456789"

文本编码格式是"ANSI" 我们用UltraEdit软件打开它,用十六进制模式显示(或者类似的可以显示16进制编码的软件)。

30 31 32 33 34 35 36 37 38 39

(4位二进制等于一个十六进制,0x30就是8位二进制数00110000,代表一个字节)


2 接着记事本"另存为"的时候可以选择4种编码格式“ANSI”,"Unicode","Unicode big endian ", "UTF-8",这里我们选择"Unicode",并把文件名改为"unicode.txt"

同样用UltraEdit软件打开它,用十六进制模式显示。

FF FE 30 00 31 00 32 00 33 00 34 00 35 00 36 00 37 00 38 00 39 00

为了让计算机认得Unicode编码的文本,我们发现Unicode格式比ANSI格式多加了2个字节的编码 FF FE ,

字符0的ASCII编码是 0x30 (十进制为96),在Unicode里用了2个字节来表示它0x0030。



CFile默认的是二进制的读写模式,如果不清楚什么是“二进制模式”

fopen("1.txt", "b")这个就是“二进制”读写模式。

CFile它不会去管你里面放的是什么,它就按字节数读到你的buffer里面。

Unicode文本就总共11*2 = 22个字节(10个数字编码,1个头编码FFFE)

我用的编译器是VS2008,Unicode环境。

TCHAR在多字节环境里为char,在Unicode里wchar(宽字符 2个字节).

为了符合C风格字符串,字符串最后放2个字节0x00 0x00 

读者可以试试

TStream定位11个宽字符,或者10个宽字符,看看效果如何。

		CFile file(fileDlg.GetPathName(), CFile::modeRead);
		TCHAR TStream[12] = {0};
		file.Read(TStream, 11*sizeof(TCHAR));
		MessageBox(TStream);

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值