Page 1 of 2

UTF-8编码网页中中文的处理方法

Posted: Oct 17 2008, 16:51
by phoenix
原理

中文网页的编码方式主要有2种,GB2312和UTF-8。在GB2312方式中,一个汉字占用2个字节,而UTF-8方式中,一个汉字占用3个字节。如下图,当我们将“一”这个汉字分别用GB2312和UTF-8方式储存的时候,以16进制方式来看,它们的内容是不一样的。
encoding.png
encoding.png (35.81 KiB) Viewed 27988 times
在Proxomitron的配置文件中,一个汉字也是占用2个字节,所以我们可以直接过滤GB2312编码网页中的中文;另一方面,我们不能用2个字节去匹配3个字节,所以不能直接过滤UTF-8编码网页中的中文。

匹配

尽管Proxomitron的帮助文件没有提到,但它实际上提供了以16进制方式按字节匹配的能力,符号为[%xx]。

以上图为例,如果要匹配UTF-8编码的“一”字,表达式为:

Code: Select all

[%e4][%b8][%80]
替换

显然,我们无法通过Proxomitron在UTF-8编码的网页中插入以3个字节为存储单位的汉字,但我们可以通过character entity的方式来达到我们的目的。关于character entity的知识,请自行google。

附件里我提供了一个工具,可以将UTF-8字符转换为character entity格式。

实例

以www.google.cn为例,以其中的“高级搜索”字符串为目标。
before.png
before.png (21.87 KiB) Viewed 27984 times
通过16进制工具,我们可以看到其16进制内容为:
sample.png
sample.png (18.54 KiB) Viewed 27986 times
相应的,匹配表达式应该写为:

Code: Select all

[%E9][%AB][%98][%E7][%BA][%A7][%E6][%90][%9C][%E7][%B4][%A2]
本例中,我打算将其替换为“不做恶”,通过附件中的工具,得到其character entity格式为:

Code: Select all

不做恶
最终的规则如下:

Code: Select all

[Patterns]
Name = "utf-8 demo"
Active = TRUE
URL = "$TYPE(htm)www.google.cn/"
Limit = 20
Match = "[%E9][%AB][%98][%E7][%BA][%A7][%E6][%90][%9C][%E7][%B4][%A2]"
Replace = "不做恶"
过滤效果如下:
after.png
after.png (21.49 KiB) Viewed 27998 times

Re: UTF-8编码网页中中文的处理方法

Posted: Oct 18 2008, 08:27
by vvmao
厉害,佩服。
我也往这方面想过,但是没做到这一步。可是这样似乎还是不能支持blockfile

Re: UTF-8编码网页中中文的处理方法

Posted: Oct 18 2008, 10:50
by phoenix
blockfile不支持[%xx],只能在规则里直接用。

Re: UTF-8编码网页中中文的处理方法

Posted: Dec 05 2008, 13:12
by 天堂之门
:idea:

应该再明确写出来,让中文用户注意:

网页源代码中如果有中文字符,那么在规则编辑框的 test 窗口内,按 Profile 按钮得到的 Sample Text: ??? bytes 这个字节数结果是错误的!

因为正如 Phoenix 所说,是把一般为 3 个字节的 UTF-8 编码当作了 2 个字节的 GB2312 编码来对待……
所以必须数一下要匹配测试的内容中有多少个中文字符,然后把这个数过的量加到字节数里才是正确的……

Re: UTF-8编码网页中中文的处理方法

Posted: Jan 24 2009, 22:34
by Ray4
这里有个工具,可能将中文字符直接转换为[%xx]的形式,可以自动将转换后的形式添加到指定文件
http://site.halfmoon.jp/movielist/96.html

Re: UTF-8编码网页中中文的处理方法

Posted: Jan 25 2009, 16:28
by phoenix
那个网页版就够用了,能将UTF-8编码按匹配替换格式进行转换。
http://pseweb.half-moon.org/

Re: UTF-8编码网页中中文的处理方法

Posted: Mar 03 2010, 14:56
by phoenix
初学python,做了个在线转换工具练手,欢迎大家测试。
http://www.proxomitron.cn/tools/prox_utf-8.py

Re: UTF-8编码网页中中文的处理方法

Posted: Mar 03 2010, 16:38
by ddbb
求编码指定.......

我PROX规则里要同时写入对应中文和日文编码的 所以UTF-8只是基本要求 还有GB2312 SHIFT_JIS

就像 http://pseweb.half-moon.org/ 这个这样的..........

就是那个太慢了.....打开要等半天........如果你也有编码指定了.......我就用你的了..........

Re: UTF-8编码网页中中文的处理方法

Posted: Mar 03 2010, 23:12
by phoenix
GB2312编码在网页和Proxomitron的配置文件中,都是以2个字节为一个单位,可以直接过滤啊。

SHIFT_JIS我不清楚。你抓个16进制的图我看看?

Re: UTF-8编码网页中中文的处理方法

Posted: Mar 04 2010, 11:02
by ddbb
这个2字节的字符是要保存到 *.ptron 文件里的.....

我现在用的是sidki_2009-05-24.ptron 西文 在里面是不能保存双字节中文的.....再加上我还要存日文......所以转成这种全字母的才能用........

16进制??? 我这没有相应的工具......不过你可以在你发出来的http://pseweb.half-moon.org/ 试试....

他那个页面默认不是有UTF-8 EUC-JP 好像他那个代码写的 只要写入任何一个正确的编码名都能转的.....我就写了个FILTER 加入了gb2312 也能正常的转........