|
|
第 1 帖 | |
|
|
标题: 请教如何从HTML文件中提取charset 就是 <META http-equiv=Content-Type content="text/html; charset=gb2312"> 里的gb2312
我知道用perl的HTML parser模块会比较容易 but... 我不会perl还... 刚才瞎写了一个极其dirty的script,能够正常工作(至少中文HOWTO里的文档都可以正常输出),但效率比较低。 另外因为绝大部分非英语文档都很规范,所以我只取了前十五行来判断... 代码:
thanks in advance....
__________________
Aoccdrnig to a rscheearch at an Elingsh uinervtisy, it deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoetnt tihng is taht frist and lsat ltteer is at the rghit pclae. 此帖于 03-07-21 20:02 被 carlos 编辑. |
|
|
|
|
|
|
|
第 2 帖 | |
|
|
您这方法真有意思哦:
CHARSET=$(head -15 $1 取前15行 | tr ">" "\n" \ 把">"替换成"\n" | grep -i 'meta[[:space:]].*charset *=' 寻找以meta开头,一个空格后接任意字符串,再接charset字串,然后在任意空格后接"="符号的行A。 | tr ";" "\n" \ 把";"替换成"\n" | grep -i charset 找含有charset字串的那行B | tr "\"" "\n" 把"\""替换成"\n" | tr -s "[[:space:]]" "\n" \ 把空格替换成"\n" | tr "=" "\n" 把"="替换成"\n" | tail -1) 取倒数第二行 完成。 不错,不错。 |
|
|
|
|
|
|
|
第 3 帖 | |
|
|
![]() 想着想着就写成这个样子了... 用了5次"tr" 这还是精炼过的,刚写出来的时候用了7个"tr"呢... |
|
|
|
|
|
|
|
第 4 帖 | |
|
|
sed -ne 's/\(.*\)charset=\(.*\)"\(.*\)/\2/p' HTMLFILE
|
|
|
|
|
|
|
|
第 5 帖 | |
|
|
兄台这个简单,好,but对文件要求太严...
title或正文里要是有"charset=xxx",等号两边有空格,等情况都会出错 |
|
|
|
|
|
|
|
第 6 帖 | |
|
|
$ sed -n '1,15 s/\(^<[meta|META].*charset.*=\)\(.*\)\">$/\2/p' showthread.html | sed -e 's/\ //g'
__________________
E6300@3.2G/P5B-D WiFi/2G RAM/1TB HDD/3540A/7900GT/E-MU 0404 Logitech S 510/MX Revolution/2407WFP/LaserJet 1020 go wild, go Gentoo 此帖于 03-07-22 17:50 被 lucida 编辑. |
|
|
|
|
|
|
|
第 7 帖 | |
|
|
penny兄的方法也不错呀...
but... 如果文件是在mac/windows下写的就完蛋了... DOS格式文件行尾是“\r”, MAC文档则根本不用"\n"直接用"\r"来换行(tr/sed好象会把整个MAC文档当做一行来处理) 另外,几位大兄都只考虑了从一行代码中提取gb2312的问题 这也是我一开始要用 tr 原因 因为html文件不要求<>在一行内完成 比如 代码:
这就需要先按html语法重新组合语句,再sed... 而且对于sed -e 's/\ //g'这种简单字符替换,改用tr -d " "会比较清晰 现在偶的程序是这个样子 代码:
还是在解决实际问题时学东西比较快 谢谢各位 此帖于 03-07-22 21:58 被 carlos 编辑. |
|
|
|
|
|
|
|
第 8 帖 | |
|
|
tr ">" "\n" 这一部份应该不需要。
|
|
|
|
|
|
|
|
第 9 帖 | |
|
|
试了一下,去掉tr ">" "\n"后,就不行了... 比如下面这个文件头
代码:
这一行中就会有多个双引号 现有程序会取最后一个双引号来分隔 结果就变成了gb2312">.....O/zh-s-html/HOWTO-INDEX-1.html |
|
|
|
|
|
|
|
第 10 帖 | |
|
|
将 \(.*\)\(".*\) 改为 \([^"]*\)\(.*\) 就应该可以?
|
|
|
|
|
|
|
|
第 11 帖 | |
|
|
no. 不起作用
要把 \(.*\)\(".*\) 改为 \([[:alnum:]-]*\)\(".*\) 才行 我还是决定使用 tr ">" "\n" ,虽然这样会使效率下降一点 但成功率和保险系数会高一些 (用time测了一下,在我的PIII900上分析700个html文件,后者比前者比多花3秒钟 32s - 29s) thanks anyway... |
|
|
|
|
|
|
|
第 12 帖 | |
|
|
如果是在 Pentium 或 486 下,分别是很明显的。
效率是要考虑的因素之一。 |
|
|
|
|
|
|
|
第 13 帖 | |
|
|
这个程序是用在本地web服务器的cgi中
一次只会处理一个html文件 就算是pentium 166,延时也很难察觉.. 此帖于 03-07-24 19:32 被 carlos 编辑. |
|
|
|
|
|