如何判断一个文本文件是无BOM 的UTF8 编码 还是 ANSI编码?

gOrubby 2011-02-24 11:28:30
大家都知道有BOM UTF-8编码很好判断, 0xEF 0XBB 0XBF。
但是如果一个文本是无BOM? 那么他是无BOM UTF-8还是ANSI的呢?

网上说可以通过UTF-8编码规则进行字符比对, 但是我要操作的文本很大有的上百M,能不能有个快速有效的方法呢?

参考链接:http://henry8088.javaeye.com/blog/780743
...全文
3385 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
walkingp 2013-09-02
  • 打赏
  • 举报
回复
顶上去,同问。
smwhotjay 2013-08-21
  • 打赏
  • 举报
回复
txt 蛋疼.
  • 打赏
  • 举报
回复
记得ECSHOP还是PHPCMS有一个判断文件否是有无BOM头的函数。
TandyT 2011-02-24
  • 打赏
  • 举报
回复
而且这个编辑器很强大,我前段时间用来打开几百兆的文本文件,只是刚打开的过程中会顿一下,后面打开后,不管拖动滚动条还是怎么的,都很流畅。

我现在基本不用 系统自带的记事本了,就用 notpad++ 。
TandyT 2011-02-24
  • 打赏
  • 举报
回复
你下载个 notpad++ ,这个也是文本编辑器,你用notpad++ 打开你那个 txt文本,然后在菜单“格式”那里,就能看到是什么编码格式的了,当前文本的编码格式前面有个亮的圆点的,那个就表示当前文本编码格式。

这个很准,我以前弄过文本内存读写什么的,不清楚什么编码时,都是用这个编辑器 来看的。
Eleven 2011-02-24
  • 打赏
  • 举报
回复
http://tech.ddvip.com/2009-03/1238498852112971.html
看下这个,希望对你有帮助
用户 昵称 2011-02-24
  • 打赏
  • 举报
回复
不过这也不是很灵.
用户 昵称 2011-02-24
  • 打赏
  • 举报
回复 1
这个没有万试万灵的函数,微软的记事本默认的是utf8,将一个文本文件存储成无bom的utf8格式,基本上能正确识别,

有一个 IsTextUnicode,俺没用过

俺自己判断的时候,将数据视为utf8格式,然后转成ansi格式,比较?的数量,如果数量一致,那是ansi,如果?变多,那么是utf8。
zzz_zou 2011-02-24
  • 打赏
  • 举报
回复
主要是对汉字的编码方式不同吧, 找到1个汉字 看看如何编码就可以了 不需要全部找的
gOrubby 2011-02-24
  • 打赏
  • 举报
回复
NNDCSDN 就不能不在我屁股后面广告啊?
tufaqing 2011-02-24
  • 打赏
  • 举报
回复 1
这个没有肯定的答案,有时还是会判断失败的,UTF8兼容单字节的ANSI编码的。判断一个字符串是否是UTF8编码的函数参考如下,要了解一下UTF8编码算法:

bool isutf8(CHAR *str)
{
int i = 0;
int size = strlen(str);

while(i < size)
{
int step = 0;
if((str[i] & 0x80) == 0x00)
{
step = 1;
}
else if((str[i] & 0xe0) == 0xc0)
{
if(i + 1 >= size) return false;
if((str[i + 1] & 0xc0) != 0x80) return false;

step = 2;
}
else if((str[i] & 0xf0) == 0xe0)
{
if(i + 2 >= size) return false;
if((str[i + 1] & 0xc0) != 0x80) return false;
if((str[i + 2] & 0xc0) != 0x80) return false;

step = 3;
}
else
{
return false;
}

i += step;
}

if(i == size) return true;

return false;
}
gOrubby 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tandyt 的回复:]
你下载个 notpad++ ,这个也是文本编辑器,你用notpad++ 打开你那个 txt文本,然后在菜单“格式”那里,就能看到是什么编码格式的了,当前文本的编码格式前面有个亮的圆点的,那个就表示当前文本编码格式。

这个很准,我以前弄过文本内存读写什么的,不清楚什么编码时,都是用这个编辑器 来看的。
[/Quote]

嗯 谢谢你的回答。
不过我想知道如何在c++/VC程序里判定。。。

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧