来混分数的人勿扰! bool OpenFile() { FILE *fp; fp = fopen(FileName, "r"); if(fp == 0) return false; int CurPos, FileSize; CurPos = ftell(Fp); //获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。 fseek(Fp, 0L, SEEK_END); // 首先将文件的当前位置移到文件的末尾 FileSize = ftell(Fp); //获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。 fseek(Fp, CurPos, SEEK_SET); while(BufferSize < FileSize) InFlate(); //扩从缓存 int i = 0; while((*(Str + i++) = getc(Fp)) != EOF); Length = i-1; fclose(fp); SetScrollBar(m_hWnd); InvalidateRect(m_hWnd, NULL, false); return true; } |
|
试过 wfstream 吗?
|
|
我这里程序读写文件没问题的,跟wfstream 没关系,读取asci格式的文件 和utf文件 没问题,utf汉字乱码而已,我想问的是 读取unicode文件 怎么判别,怎么转码? |
|
fp = fopen(FileName, “rb“);
不要把 |
|
可以具体吗?给个例子号码?谢谢了,另外 我读 unicode和utf-8两种文件都是这样读吗?谢谢了
|
|
怎么处理utf8,这个可以google到的。
unicode,有bom可以根据bom判断,没有bom但是有英文可以自己根据\0的情况进行判断。 剩下的就是自己google,然后反复验证各网页的说法了。 |
|
读完拿libiconv系列函数转换下编码吧..
不过也有天然乱码的情况,比如用GB码保存的”伪尾纬未蔚味畏胃喂魏位渭谓”,可以很好的用utf8格式识别成希腊字母 |
|
怎么知道他有bom还是没有bom? |
|
小弟是菜鸟,可以详细点吗? |
|
60分 |
用这个方式可以把UTF8编码转换成GB码,当然如果文件比较大,要注意控制缓冲区,一段一段转换..
iconv_t gb_cd = iconv_open ("GB18030", "UTF-8"); iconv (gb_cd, &utf8_buf, &utf8_len, &gb_buf, &gb_len); iconv_close (gb_cd);
然后就是尝试把原文分别当做上述编码进行转换,转换过程中可能会发生错误,检测到错误可以用来否定对应的编码类型. |
不过在windows下玩libiconv库,光是先把这个库添到工程里面,就是一件麻烦事啊
|
|
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 |