博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网页编码识别的方法 - charset
阅读量:2492 次
发布时间:2019-05-11

本文共 919 字,大约阅读时间需要 3 分钟。

提取网页编码,最简单也是最有效的方法是到网页数据头里去找

但方法要写的稳定、通用,其实并没有表明上看的那样简单

 

陈运文

 

这些简单写写注意点:

 

1 charset string 的选取

 

注意不同的网页lang标准,string可能是不同的:

 

 bool is_xml = html_start != NULL && (strncmp(html_start, "<rss", 4) == 0 || strncmp(html_start, "<?xml", 5) == 0);

 const char* charset_str = is_xml ? "encoding" : "charset";

 

2 通过寻找串 "document.write" 来精确定位

 

注意网页文本可能本身不规范,未必一定有charset出现

 

3 大小写要归一(UTF-8/utf-8),空格、括号等无用字符要去除

 

4 判断是否编码类型:strncasecmp(page, "vti_encoding", 12) == 0

  vti_encoding表示网页是由microsoft frontpage生成的hidden web,这种网页显示乱码,可丢弃

 

5 从提取的charset字段映射到对应的编码方式

 

可能存在的编码方式太多了,中文和日文的编码方式尤其多,一定需要小心的处理:

 

iso-8859

iso-2022

gb2312

gbk

gb18030

big5

sjis

ujis

jis

shift

euckr  - 棒子语

eucjp

autocht

utf-*

 

 

6 取一段网页文本来验证是否编码方式正确

这个涉及到具体编码表,比较复杂,这里简单贴几个中文gb编码使用的:

 

#define GBK_1LO  0x81 //129

#define GBK_1HI  0xfe //254
#define GBK_1NUM 0x7e //126
#define GBK_2LO  0x40 //64
#define GBK_2HI  0xfe //254
#define GBK_2NUM 0xbf //191
#define GBK_2INV 0x7f //127

 

下次具体写写

 

 

 

 

 

 

 

转载地址:http://jcmrb.baihongyu.com/

你可能感兴趣的文章
设计模式12_外观模式
查看>>
设计模式13_享元模式
查看>>
设计模式14_组合结构
查看>>
设计模式15_模板
查看>>
海龟交易法则01_玩风险的交易者
查看>>
CTA策略02_boll
查看>>
vnpy通过jqdatasdk初始化实时数据及历史数据下载
查看>>
设计模式19_状态
查看>>
设计模式20_观察者
查看>>
vnpy学习10_常见坑02
查看>>
用时三个月,终于把所有的Python库全部整理了!拿去别客气!
查看>>
pd.stats.ols.MovingOLS以及替代
查看>>
vnpy学习11_增加测试评估指标
查看>>
资金流入流出计算方法
查看>>
海龟交易法则07_如何衡量风险
查看>>
海龟交易法则08_风险与资金管理
查看>>
海龟交易法则09_海龟式积木
查看>>
海龟交易法则10_通用积木
查看>>
海龟交易法则14_掌控心魔
查看>>
海龟交易法则16_附原版海龟交易法则
查看>>