百分求助:如何根据文本内容判断是ANSI编码还是UTF8编码? 因为对于包括汉字的文本,由于编码不同,可能是ANSI,也可能是UTF-8,因此,我需要能区分开不同的编码,以便于通过进一步的代码转换将不同的文件全部统一成一种编码格式。我的初步设想,是通过码段来判断,不知道大家有没有什么好的思路和方法,谢谢!另外,如能提供UTF8的中文详细码段,也很感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如我提问的文中所述,我搜索了,但找不着,UTF8的码段,如果你有,能否提供一下?谢谢! 用IsTextUnicode()这个API函数吧我是从《Windows程序设计》的第11章看到这个函数的,你可以参考一下这本书,网上有电子版下载的。 你可以在Windows下把普通文本另存为UTF-8格式,你就可以看见头上加了什么值了 TO yzx0023: 您所说的这种方案是针对于特例的,我早试过了.但是现在由于处理的是数据流,没有前置标识.TO yaozijian110: 我需要区分的不是Unicode,而是Ansi/UTF8再问,谢谢! gz,如果元文件是文本文件,可以通过文件头判断: bool bIsANSI = true; FILE *hFile = fopen(sFileName,"rb"); if(hFile==NULL) { CString sMsg; sMsg.Format(_T("打开原始文件[%d]时出错!"), sFileName); return false;// } unsigned short ch1 = fgetc(hFile); unsigned short ch2 = fgetc(hFile); if(ch1==0xff && ch2==0xfe) { bIsANSI = false; } TO 楼上:不是文本文件,是字符流。文本的方式已解决。而且对于UTF8,其文件头并非你所说的FF FE(这是Unicode),而是EF BB BF再请问,对于字符流的如何判断是ANSI还是UTF-8还有:声明,没有头信息可以借鉴的。 对于每个 Unicode 字符,UTF-8 用可变数目的字节来对该字符进行编码。对于较低的 127 个 ASCII 字符,此编码进行了优化,从而产生了一种能够以国际化的方式对英语进行编码的高效机制。UTF-8 标识符是 Unicode 字节顺序标记(十六进制 0xFEFF),它在 UTF-8 中表示为十六进制 0xEF 0xBB 0xBF。字节顺序标记用于将 UTF-8 文本与其他编码区分开来。上面来自msdn,看上去,字符流也应该包含头的,否则是不合法的字符流 To blastall: 字符流并不象文件,对于网络上的一些站点,如果有UTF-8格式的网页的时候,得到字节流就是没有标志头的。 IMultiLanguage2 :: DetectInputCodepage 太不幸了,http://www.unicode.org,应该可以查到相关编码 保存复选框按钮的BOOL型变量值 如何在 .c 文件中 调用 .cpp 文件的函数 串口通讯~~给100分 vc里面如何关联打开文件的类型? 有关ocx的注册问题 有个串口通信的dll,我想封装成activex控件,接口函数不怎么会设置?谁帮看看? VC初学简单的问题----怀疑自己的智商…… ∮●●急救!十万火急!求解决一问题,一个程序调用同一个dll两次出现dll里面的全局变量互相影响 ----请问所谓的 overlapped 到底是什么意思,作什么用?---- VC和VC++是一回事还是两回事? rich edit的问题,我再线等啊,好急!!! 兄弟们有没有VC或API的群啊?
我是从《Windows程序设计》的第11章看到这个函数的,你可以参考一下这本书,网上有电子版下载的。
TO yaozijian110: 我需要区分的不是Unicode,而是Ansi/UTF8再问,谢谢!
FILE *hFile = fopen(sFileName,"rb");
if(hFile==NULL) {
CString sMsg;
sMsg.Format(_T("打开原始文件[%d]时出错!"), sFileName);
return false;//
}
unsigned short ch1 = fgetc(hFile);
unsigned short ch2 = fgetc(hFile);
if(ch1==0xff && ch2==0xfe)
{
bIsANSI = false;
}
还有:声明,没有头信息可以借鉴的。