现在的位置: 首页 > 综合 > 正文

CStdioFile的ReadString读入中英文的总结(unicode-ucs2/utf8-无bom/ansi) .

2013年02月23日 ⁄ 综合 ⁄ 共 921字 ⁄ 字号 评论关闭
文章目录

文章讨论的前提:使用ReadString来读取字符串.  sizeof(TCHAR) == 2 为 wchar_t

(读本文之前,可以先读一下WriteString写入的总结:
http://blog.csdn.net/chunyexiyu/article/details/8938540
  里面的内容和这个ReasString关联比较大)

文本为utfi/ansi格式:

utfi/ansi情况下,不能使用binary来打开,因为这种模式下,一次按照TCHAR的大小,读取两个字符,结束符号0d的话,需要读取到0x 0d 00才会认为是读取一行结束。而我们知道untf8/ansi情况存储的话,里面是没有0x00存在的。

utf8/ansi情况下,使用typetext打开,可以把字符读入到CString里面,但存储是按照每次存一个字节到TCHAR中的。

CString里面存储的信息为:每个TCHAR存储一个字节的信息(Char)

例如:文件有100个字节,同时包含有种英文,读入到CString种,就会是100个长度

例如:ASNI格式的内容  abc内蒙古 (0x61 62  63 C4 DA C3 C9 B9 C5) 3+2*3 =9

typetext读入到CString种,长度为9,CString转TCHAR*的字符串为

61 00 (little endian,低字节在前,高字节在后) 

62 00 

63 00  

C4 00

DA 00

C3 00

C9 00

B9 00

C5 00

 

文本为unicode格式:

unicode情况下:不能使用typetext方式打开,因为unicode下,文件中的内容 如abc在文件中存储为 61 00 62 00 63 00,ReadString在typetext模式下,一个字节一个字节来读入到CString中,遇到0x00,读入到CString就异常了,就不是我们想要的了。CString中是不能再中间某一位存储0x00的。

 

unicode模式下,可以使用binary模式打开,先seek到第3个字节(前两个字节是unicode的标示符号),然后使用ReadString来读取。Binary模式下,是按照TCHAR的大小,一次读取两个字符,这样就不存在一个一个字符读取到0x00的问题。

 

抱歉!评论已关闭.