lc 函数使用问题

lc 函数使用问题

$ echo '★㊣★★.ABc' | perl -ne 'print lc()'
★﹊★★.abc

在使用 lc 时,一些特殊字符也被转换了,如何能让 lc 只对字母处理,而不处理其他的呢?
use utf8;


在ubuntu下

root@mx-yujie:~# perl -e "print lc('★㊣★★.ABc');"
★㊣★★.abc

你也可以先用[a-zA-Z]进行判断


QUOTE:
原帖由 hfahe 于 2008-8-15 10:01 发表
use utf8;


在ubuntu下

root@mx-yujie:~# perl -e "print lc('★㊣★★.ABc');"
★㊣★★.abc

我这里就不可以呢。
$ echo '★㊣★★.ABc' | perl -ne 'use utf8;print lc()'
★﹊★★.abc

lc 受什么环境变量的影响?


QUOTE:
原帖由 churchmice 于 2008-8-15 10:02 发表
你也可以先用[a-zA-Z]进行判断

判断不了的,如果对整体判断,那没什么意义,如果一个字符一个字符判断,那个特殊字符的一半正好是一个大写字母。
试试
perl -e 'use utf8;print lc("★㊣★★.ABc");'


QUOTE:
原帖由 hfahe 于 2008-8-15 10:19 发表
试试
perl -e 'use utf8;print lc("★㊣★★.ABc");'

$perl -e 'use utf8;print lc("★㊣★★.ABc");'
Malformed UTF-8 character (unexpected continuation byte 0xa1, with no preceding start byte) at -e line 1.
Malformed UTF-8 character (unexpected non-continuation byte 0x49, 1 byte after start byte 0xef, expected 3 bytes) at -e line 1.
use Encode;

$_ = '★㊣★★.ABc';

print encode('gbk', lc decode('gbk', $_));


QUOTE:
原帖由 cobrawgl 于 2008-8-15 11:46 发表
use Encode;

$_ = '★㊣★★.ABc';

print encode('gbk', lc decode('gbk', $_));

Thank you very much.