perl去除字符串中的空格有问题

来源:互联网 发布:云数据库 mysql 编辑:程序博客网 时间:2024/05/17 22:32

淘宝网页中有下面字符:

价  格:

我最开始用perl试图去除中间的空格时用s/\s//g,发现根本没反应。

淘宝的这个空格不是我们想像中的空格!

后来我想是不是编码的问题,因为网页的编码是GBK,而perl默认处理的都是UTF-8,所以转了一下。

iconv -f GBK -t UTF-8 file1 -o file2

将Google香港的Big5编码转换成GBK编码

curl -s http://www.google.com.hk/ | iconv -f big5 -t gbk

依旧没反应。实际上perl在处理字符串时读入内存的时候已统一转换成了UTF-8编码,不需要我们劳神费心,只是把字符串处理完输出的时候又成乱码了。如果你需要输出就手动转换一下,在程序里可以用Encode::from_to或Unicode::MapUTF8::to_utf8,如果你不需要输出就不需要事先转换。

淘宝的这个空格和我们想像中的空格到底有什么区别?

我新建一个文件,把淘宝“价格”之间的那两个空格复制到第一行,查看文件的十六进制编码。

然后第二行自己输了两个空格,再次查看文件的十六进制编码。

淘宝的一个空格用e3 80 80来表示,我的一个空格用20来表示,0a应该代表换行。

那我如何把淘宝的空格去掉呢?直接把淘宝的空格复制到正则表达式中吧:

s/[ \f\t\r\n ]//g

原创粉丝点击