也许不应该发这里:已知编码,如果通过字符判断html文档语言?

nxnh 2008-01-23 11:36:05
我这现在有一大堆html文档,大部分是utf-8编码,什么语言都有。另一些是gb2312的,还有少部分是utf-7及gbk。我想挑选出其中的中文网页,gb的不用动了,但我不太了解utf-8编码,谁知道怎样通过读取字符判断该文档的语言?主要是utf-8。谢谢。
...全文
111 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
nxnh 2008-02-04
  • 打赏
  • 举报
回复
原来linux下转换编码有库的, iconv.h。
nxnh 2008-01-29
  • 打赏
  • 举报
回复
研究研究...估计把这活干完我就是半个编码专家了。
草原可可 2008-01-27
  • 打赏
  • 举报
回复
uft-8是国际标准 都可以用的
Mnky 2008-01-27
  • 打赏
  • 举报
回复
这种东西就是概率猜的,记事本和UltraEdit都是这么做的,通过文本的统计来选择一种最可能的编码方式来打开。
nxnh 2008-01-27
  • 打赏
  • 举报
回复
现在的问题是我已经知道编码,但是不知道是不是中文写成的。

我打算使用这种办法,先把编码转换为utf-8,再查里面有多少字符是在中文编码区间的。
redleaves 2008-01-27
  • 打赏
  • 举报
回复
to nxnh:
用UTF-8几乎没有办法直接判断字符的字面区间,而且它还是变长编码...
要判断,最好直接使用UNICODE/UCS2/UCS4.
nxnh 2008-01-27
  • 打赏
  • 举报
回复
to redleaves:我就是那个意思,编码太多,都转成一个utf-8便于处理。utf-8的中文区间好象是三段,就是转换编码的不好弄,有gb2312,gbk,gb18030,utf-7,utf-16,iso-8859-1 .... 这个让别人去弄。

to Mnky:你没看明白我的问题...
redleaves 2008-01-27
  • 打赏
  • 举报
回复
TO nxnh:
UTF-8怎么看是什么编码区间?再转回UNICODE?
其实GB2312也是有固定的中文区域的....
不过如果你的文本有很多种编码,那就最好把它们都转成UNICODE/UCS2/UCS4.这样就有据可查,只要看字符处于什么区间,就可以判断内容是什么.
只是中文的区间分了好几段....
redleaves 2008-01-25
  • 打赏
  • 举报
回复
BOM头并不是所有的文本都有....
一般来说,很难准确判断文本文件是什么编码的.
目前来说,唯一比较有效的办法是转换测试.
比如:先假设文件为gb2312,然后把它转换为UNICODE,然后再转换回来.比较原始的字符串和转换出来的字符串.如果完全一样,那可以认为文件是gb2312的.至少gb2312可以正确的表示文本里的内容....
对于UTF-8就要简单一点,因为UTF-8有固定的编码规范,在排除了其它编码的情况下,如果文本符合它的编码规范,就表示它是一个UTF-8格式的文本.
nxnh 2008-01-25
  • 打赏
  • 举报
回复
但它不是以ee bb bf开头的
nxnh 2008-01-24
  • 打赏
  • 举报
回复
还是不行,这个网页就不是这样:
http://www.htcca.org/uk/aspect.html
我采用查看字符分布的方法解决了,就是看哪些字符是什么值来判断。虽然不是很准确,但是也凑和了。
nxnh 2008-01-24
  • 打赏
  • 举报
回复
谢谢楼上,解决了我的大问题。
loops 2008-01-24
  • 打赏
  • 举报
回复
http://www.htcca.org/uk/aspect.html 为啥不行?charset="utf-8"的啊。



loops 2008-01-23
  • 打赏
  • 举报
回复
(1)对于littile endian的utf-8查找开头三个字节是否是 EF BB BF
(2)用regex查找一下charset="utf-8"
(3)查判断编码的开源软件,我记得有,但是名称忘掉了。但是这种方法不一定100%准确。

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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