2009年3月21日星期六

[PerlChina] Re: perl 日志模块哪个方便好用些。

其实我觉得 rotate 只要交给 logrotate(1) 来办就可以了,
应用程序犯不着自己实现。

2009/3/14 Okajn <okajn.cn@gmail.com>:
> 我之前是做Java的,log一般用的log4j..
> 去年12月做了个项目刚接触的Perl,
> 自然也就选了log4perl,感觉还不错(可能因为习惯了log4j),
> 配置什么的基本和log4j一样,可以试试。。
>
> 别的我没用过,没有发言权~~
>
> On 3月4日, 上午11时49分, Yuan Jiang <sleetd...@gmail.com> wrote:
>> RT
>>
>> 要求有rotate功能,并且分log level, 配置方便些就行。
>>
>> cpan一search一大堆,在这里问问大家都喜欢用什么吧。
>>
>> --
>> 姜源
>> Yuan Jianghttp://blog.vetcafe.net
> >
>

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 怎么解码混合编码的中英文混合字符串?

這種混合編碼的確相當難處理。
我懷疑微軟原始的 wma tag 是純綷 utf-16le 編碼,而 perl 的 Audio::WMA 模塊在提取之後處理成了混合編碼。所以
看了看 /usr/share/perl5/Audio/WMA.pm ,果然,寫這個模塊的人沒有考慮到混合字符的情況。他把西歐字符轉換為
latin1 編碼,而其他字符轉換為 utf16 編碼,然後混合在一起。一個害死人的 bug。修改這個 pm 文件之後,問題解決。

On 3月21日, 上午10时40分, purl lamp <lamp.p...@gmail.com> wrote:
> 41 4C 42 55 4D 54 49 54 - 4C 45 3AALBUMTITLE:Encode::XS=SCALAR(0x8441198)5F
> 66 5B CB 53_f[.SEncode::XS=SCALAR(0x847f6a8)34 69 6E 314in1
> Encode::XS=SCALAR(0x8441198)CD 73 CF 85 C6 96.s....* Encodings too
> ambiguous: cp936 or UTF-16LE*2D-Encode::XS=SCALAR(0x8441198)39 31 66 2E 6E
> 65 7491f.netEncode::XS=SCALAR(0x8441198)
> 以上是按照空格切割的结果,两种编码混在一起之后问题多多,尤其是 4in1 和 - 之间的串。
>
> 2009/3/21 PIG <addm...@gmail.com>
>
> > win的utf-16和unix的utf-16 00的位置不一样。
>
> > 2009/3/20 Calvin <calvin.n...@gmail.com>:
> > > 见本讨论组"文件"里面的 tags 文件。
> > > 我是直接 print 到这个文件里面的,ubuntu 下面 file 了一下,结果为 data,应该保持了原始获取的编码。
>
> > > On 3月20日, 下午6时14分, cnhack TNT <cnhack...@gmail.com> wrote:
> > >> 忘了说了,发附件,不要直接贴内容:-)
>
> > >> 2009/3/20 cnhack TNT <cnhack...@gmail.com>
>
> > >> > 能否将你取得的一个 tag 样例信息导出到文本文件,然后发上来
> > >> > 另外,你可以 hexdump
>
> > 一下这个文件,因为UTF-16LE是双字节编码,如果是混合编码,有可能看到的字节数为奇数(多看几个出问题的文件,因为非utf-16le编码的字符其字节个数可能刚好凑够偶数个)
>
> > >> > 2009/3/20 Calvin <calvin.n...@gmail.com>
>
> > >> > 最近在处理一些 wma 文件的 tag,遇到这样的问题,非常棘手。
>
> > >> >> 从网上搜索到的资料说,默认微软 wma 格式音频文件的 tag 是用 utf-16le 编码的。
>
> > >> >> 我用 Audio::WMA 取得 tag 信息,用 utf-16le
> > decode后,汉字解码正常,凡是遇到夹杂在中文字串中的英文字母或者短横
> > >> >> 之类的符号就乱码(显示成不正确的汉字或奇怪的符号)。如果用 latin1 或 gbk 来
> > decode,则所有汉字显示乱码,而夹杂在汉字里面的
> > >> >> 英文字母和符号显示正常。
>
> > >> >> 怀疑这些字符串是混合编码的,汉字使用 utf-16le 编码,而英文字母和符号使用 latin1
> > 编码,然后凑成一个完整的字符串。究竟是不是这
> > >> >> 样呢?还是 perl 对 utf-16le 解码本身有 bug?
>
> > >> >> 这样的字符串怎样才能正确解码呢?
>
> > >> >> 如果是混合编码的话,作为模拟,一下脚本是一个实验:
>
> > >> >> #!/usr/bin/perl
> > >> >> use Encode;
>
> > >> >> $s1="出征进行曲";
> > >> >> $s1=decode_utf8($s1);
> > >> >> $s1=encode('utf-16le',$s1); #直接这样编码成 utf-16le是完全没问题的
> > >> >> $s2="-AFtest-第4曲";
> > >> >> $s2=decode_utf8($s2);
> > >> >> $s2=encode('gbk',$s2); #直接这样编码成 gbk 也是完全没问题的
> > >> >> $string=$s1.$s2; #这里,为了模拟,制作了一个混合编码字串
>
> > >> >> $aa=decode('utf-16le',$string); # 这里,用 utf-16le 解码
> > >> >> $aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
> > >> >> print "$aa\n"; #这里,原 $s1 部分解码正常,原 $s2 部分乱码
>
> > >> >> $aa=decode('gbk',$string); # 这里,用 gbk 解码
> > >> >> $aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
> > >> >> print "$aa\n"; #这里,原 $s1 部分乱码,原 $s2 部分显示正常
>
> > >> >> 如何让整个 $string 都正确解码呢?
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Fwd: [pm_groups] TPF in Google Summer of Code!

---------- Forwarded message ----------
From: Eric Wilhelm <scratchcomputing@gmail.com>
Date: Sun, Mar 22, 2009 at 8:09 AM
Subject: [pm_groups] TPF in Google Summer of Code!
To: pm_groups@pm.org
Cc: Jonathan Leto <jaleto@gmail.com>


Hi all,

Please forward this to your local groups.

The Perl Foundation has been officially accepted into the Google Summer
of Code 2009 program as a mentor organization!

Hopefully some of you have identified some potential students already.
Now we need your help getting them to submit their proposals.

http://leto.net/dukeleto.pl/2009/03/tpf-accepted-to-google-summer-of-code-2009.html

The student application period begins Monday, March 23rd and runs
through April 3rd.  (Students note:  you can edit your proposal
throughout that 11-day period -- getting it started early and talking
to potential mentors greatly increases your chances vs throwing it over
the wall at the deadline.)  See this page for details:

 http://code.google.com/soc/

Interested students and potential mentors, please read the GSoC info on
the Perl wiki:

 http://www.perlfoundation.org/perl5/index.cgi?gsoc
 http://www.perlfoundation.org/perl5/index.cgi?gsoc_2009_projects

If you're interested in mentoring or have a good project suggestion, now
is the time to get your info up on the wiki so students will know about
your code and where to find you.

Thanks,
Eric
--
Request pm.org Technical Support via support@pm.org

pm_groups mailing list
pm_groups@pm.org
http://mail.pm.org/mailman/listinfo/pm_groups

--
Fayland Lam // http://www.fayland.org/
Foorum based on Catalyst // http://www.foorumbbs.com/

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: iPhone vs iPhone 3G

asia asia 写道:
> iPhone vs iPhone 3G
> The new iPhone 3G released at almost half the price of the original
> iPhone by apple, is now taking over the market by storm and has set
> a new standard in itself in the 3G phone market. We aren't talking
> about market competition here as these phones are part of the same
> family-apple, So this hub is just a reason as to why some people
[ snip ]

just asked out of curious, who has been using iPhone on this list? :-)

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

2009年3月20日星期五

[PerlChina] iPhone vs iPhone 3G

iPhone vs iPhone 3G
The new iPhone 3G released at almost half the price of the original iPhone by apple, is now taking over the market by storm and has set a new standard in itself in the 3G phone market. We aren't talking about market competition here as these phones are part of the same family-apple, So this hub is just a reason as to why some people prefer one phone over the other and I'd love to be as blunt as i can in making this analysis as i needn't be concerned about hurting the sentiments of brand lovers here. You'd probably be thinking about the differences that it can make at half the cost of the original phone and I'm here to show you exactly that. At half the price, it fares better than the former in ways unimaginable.

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 怎么解码混合编码的中英文混合字符串?

41 4C 42 55 4D 54 49 54 - 4C 45 3AALBUMTITLE:Encode::XS=SCALAR(0x8441198)
5F 66 5B CB 53 _f[.SEncode::XS=SCALAR(0x847f6a8)
34 69 6E 314in1Encode::XS=SCALAR(0x8441198)
CD 73 CF 85 C6 96.s.... Encodings too ambiguous: cp936 or UTF-16LE
2D-Encode::XS=SCALAR(0x8441198)
39 31 66 2E 6E 65 7491f.netEncode::XS=SCALAR(0x8441198)

以上是按照空格切割的结果,两种编码混在一起之后问题多多,尤其是 4in1 和 - 之间的串。

2009/3/21 PIG <addmyin@gmail.com>
win的utf-16和unix的utf-16 00的位置不一样。


2009/3/20 Calvin <calvin.ngei@gmail.com>:
> 见本讨论组"文件"里面的 tags 文件。
> 我是直接 print 到这个文件里面的,ubuntu 下面 file 了一下,结果为 data,应该保持了原始获取的编码。
>
> On 3月20日, 下午6时14分, cnhack TNT <cnhack...@gmail.com> wrote:
>> 忘了说了,发附件,不要直接贴内容:-)
>>
>> 2009/3/20 cnhack TNT <cnhack...@gmail.com>
>>
>> > 能否将你取得的一个 tag 样例信息导出到文本文件,然后发上来
>> > 另外,你可以 hexdump
>> > 一下这个文件,因为UTF-16LE是双字节编码,如果是混合编码,有可能看到的字节数为奇数(多看几个出问题的文件,因为非utf-16le编码的字符其字节个数可能刚好凑够偶数个)
>>
>> > 2009/3/20 Calvin <calvin.n...@gmail.com>
>>
>> > 最近在处理一些 wma 文件的 tag,遇到这样的问题,非常棘手。
>>
>> >> 从网上搜索到的资料说,默认微软 wma 格式音频文件的 tag 是用 utf-16le 编码的。
>>
>> >> 我用 Audio::WMA 取得 tag 信息,用 utf-16le decode后,汉字解码正常,凡是遇到夹杂在中文字串中的英文字母或者短横
>> >> 之类的符号就乱码(显示成不正确的汉字或奇怪的符号)。如果用 latin1 或 gbk 来 decode,则所有汉字显示乱码,而夹杂在汉字里面的
>> >> 英文字母和符号显示正常。
>>
>> >> 怀疑这些字符串是混合编码的,汉字使用 utf-16le 编码,而英文字母和符号使用 latin1 编码,然后凑成一个完整的字符串。究竟是不是这
>> >> 样呢?还是 perl 对 utf-16le 解码本身有 bug?
>>
>> >> 这样的字符串怎样才能正确解码呢?
>>
>> >> 如果是混合编码的话,作为模拟,一下脚本是一个实验:
>>
>> >> #!/usr/bin/perl
>> >> use Encode;
>>
>> >> $s1="出征进行曲";
>> >> $s1=decode_utf8($s1);
>> >> $s1=encode('utf-16le',$s1); #直接这样编码成 utf-16le是完全没问题的
>> >> $s2="-AFtest-第4曲";
>> >> $s2=decode_utf8($s2);
>> >> $s2=encode('gbk',$s2); #直接这样编码成 gbk 也是完全没问题的
>> >> $string=$s1.$s2; #这里,为了模拟,制作了一个混合编码字串
>>
>> >> $aa=decode('utf-16le',$string); # 这里,用 utf-16le 解码
>> >> $aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
>> >> print "$aa\n"; #这里,原 $s1 部分解码正常,原 $s2 部分乱码
>>
>> >> $aa=decode('gbk',$string); # 这里,用 gbk 解码
>> >> $aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
>> >> print "$aa\n"; #这里,原 $s1 部分乱码,原 $s2 部分显示正常
>>
>> >> 如何让整个 $string 都正确解码呢?
> >
>




--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: Perl vs Python

感觉回到新闻组时代。。

顺便进新闻组里enjoy点picture。。发现不如http爽。。。

2009/3/20 Wan Chaowei <wanmyome@gmail.com>:
> 对的,看着都是熟面孔,嘿嘿
>
> 2009/3/20 xjdengz <xjdengz@gmail.com>
>>
>> 2009/3/20 Wan Chaowei <wanmyome@gmail.com>:
>> > perlchina的那群牛人全到这里来了,perl是很牛的
>> >
>> China Unix上的Perl版的牛人们也来了
>> >
>> > >
>> >
>>
>>
>
>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 怎么解码混合编码的中英文混合字符串?

win的utf-16和unix的utf-16 00的位置不一样。


2009/3/20 Calvin <calvin.ngei@gmail.com>:
> 见本讨论组"文件"里面的 tags 文件。
> 我是直接 print 到这个文件里面的,ubuntu 下面 file 了一下,结果为 data,应该保持了原始获取的编码。
>
> On 3月20日, 下午6时14分, cnhack TNT <cnhack...@gmail.com> wrote:
>> 忘了说了,发附件,不要直接贴内容:-)
>>
>> 2009/3/20 cnhack TNT <cnhack...@gmail.com>
>>
>> > 能否将你取得的一个 tag 样例信息导出到文本文件,然后发上来
>> > 另外,你可以 hexdump
>> > 一下这个文件,因为UTF-16LE是双字节编码,如果是混合编码,有可能看到的字节数为奇数(多看几个出问题的文件,因为非utf-16le编码的字符其字节个数可能刚好凑够偶数个)
>>
>> > 2009/3/20 Calvin <calvin.n...@gmail.com>
>>
>> > 最近在处理一些 wma 文件的 tag,遇到这样的问题,非常棘手。
>>
>> >> 从网上搜索到的资料说,默认微软 wma 格式音频文件的 tag 是用 utf-16le 编码的。
>>
>> >> 我用 Audio::WMA 取得 tag 信息,用 utf-16le decode后,汉字解码正常,凡是遇到夹杂在中文字串中的英文字母或者短横
>> >> 之类的符号就乱码(显示成不正确的汉字或奇怪的符号)。如果用 latin1 或 gbk 来 decode,则所有汉字显示乱码,而夹杂在汉字里面的
>> >> 英文字母和符号显示正常。
>>
>> >> 怀疑这些字符串是混合编码的,汉字使用 utf-16le 编码,而英文字母和符号使用 latin1 编码,然后凑成一个完整的字符串。究竟是不是这
>> >> 样呢?还是 perl 对 utf-16le 解码本身有 bug?
>>
>> >> 这样的字符串怎样才能正确解码呢?
>>
>> >> 如果是混合编码的话,作为模拟,一下脚本是一个实验:
>>
>> >> #!/usr/bin/perl
>> >> use Encode;
>>
>> >> $s1="出征进行曲";
>> >> $s1=decode_utf8($s1);
>> >> $s1=encode('utf-16le',$s1); #直接这样编码成 utf-16le是完全没问题的
>> >> $s2="-AFtest-第4曲";
>> >> $s2=decode_utf8($s2);
>> >> $s2=encode('gbk',$s2); #直接这样编码成 gbk 也是完全没问题的
>> >> $string=$s1.$s2; #这里,为了模拟,制作了一个混合编码字串
>>
>> >> $aa=decode('utf-16le',$string); # 这里,用 utf-16le 解码
>> >> $aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
>> >> print "$aa\n"; #这里,原 $s1 部分解码正常,原 $s2 部分乱码
>>
>> >> $aa=decode('gbk',$string); # 这里,用 gbk 解码
>> >> $aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
>> >> print "$aa\n"; #这里,原 $s1 部分乱码,原 $s2 部分显示正常
>>
>> >> 如何让整个 $string 都正确解码呢?
> >
>

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: Perl vs Python

对的,看着都是熟面孔,嘿嘿

2009/3/20 xjdengz <xjdengz@gmail.com>
2009/3/20 Wan Chaowei <wanmyome@gmail.com>:
> perlchina的那群牛人全到这里来了,perl是很牛的
>
China Unix上的Perl版的牛人们也来了
>
> >
>






--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: Perl vs Python

2009/3/20 Wan Chaowei <wanmyome@gmail.com>:
> perlchina的那群牛人全到这里来了,perl是很牛的
>
China Unix上的Perl版的牛人们也来了
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: Perl vs Python

perlchina的那群牛人全到这里来了,perl是很牛的



--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 怎么解码混合编码的中英文混合字符串?

见本讨论组"文件"里面的 tags 文件。
我是直接 print 到这个文件里面的,ubuntu 下面 file 了一下,结果为 data,应该保持了原始获取的编码。

On 3月20日, 下午6时14分, cnhack TNT <cnhack...@gmail.com> wrote:
> 忘了说了,发附件,不要直接贴内容:-)
>
> 2009/3/20 cnhack TNT <cnhack...@gmail.com>
>
> > 能否将你取得的一个 tag 样例信息导出到文本文件,然后发上来
> > 另外,你可以 hexdump
> > 一下这个文件,因为UTF-16LE是双字节编码,如果是混合编码,有可能看到的字节数为奇数(多看几个出问题的文件,因为非utf-16le编码的字符其字节个数可能刚好凑够偶数个)
>
> > 2009/3/20 Calvin <calvin.n...@gmail.com>
>
> > 最近在处理一些 wma 文件的 tag,遇到这样的问题,非常棘手。
>
> >> 从网上搜索到的资料说,默认微软 wma 格式音频文件的 tag 是用 utf-16le 编码的。
>
> >> 我用 Audio::WMA 取得 tag 信息,用 utf-16le decode后,汉字解码正常,凡是遇到夹杂在中文字串中的英文字母或者短横
> >> 之类的符号就乱码(显示成不正确的汉字或奇怪的符号)。如果用 latin1 或 gbk 来 decode,则所有汉字显示乱码,而夹杂在汉字里面的
> >> 英文字母和符号显示正常。
>
> >> 怀疑这些字符串是混合编码的,汉字使用 utf-16le 编码,而英文字母和符号使用 latin1 编码,然后凑成一个完整的字符串。究竟是不是这
> >> 样呢?还是 perl 对 utf-16le 解码本身有 bug?
>
> >> 这样的字符串怎样才能正确解码呢?
>
> >> 如果是混合编码的话,作为模拟,一下脚本是一个实验:
>
> >> #!/usr/bin/perl
> >> use Encode;
>
> >> $s1="出征进行曲";
> >> $s1=decode_utf8($s1);
> >> $s1=encode('utf-16le',$s1); #直接这样编码成 utf-16le是完全没问题的
> >> $s2="-AFtest-第4曲";
> >> $s2=decode_utf8($s2);
> >> $s2=encode('gbk',$s2); #直接这样编码成 gbk 也是完全没问题的
> >> $string=$s1.$s2; #这里,为了模拟,制作了一个混合编码字串
>
> >> $aa=decode('utf-16le',$string); # 这里,用 utf-16le 解码
> >> $aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
> >> print "$aa\n"; #这里,原 $s1 部分解码正常,原 $s2 部分乱码
>
> >> $aa=decode('gbk',$string); # 这里,用 gbk 解码
> >> $aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
> >> print "$aa\n"; #这里,原 $s1 部分乱码,原 $s2 部分显示正常
>
> >> 如何让整个 $string 都正确解码呢?
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: Perl vs Python

2009/3/7 jesse <newday.jesse@gmail.com>:
> 关于 perl vs python ,这个值得一看
> 1.Slurping a File
>         http://www.strombergers.com/python/python_perl_slurp_file.html
perl -MIO::All -e '$foo < io("ttt.pl"); print $foo'
不要嘲笑我用了 IO::All!否则我就嘲笑 import time!
> 2.Python is Cool (and Perl is not), Especially for C/C++ Programmers
> http://www.strombergers.com/python/
发现这个连接内容比较多,那就算了,不一一驳斥了。
>
>
> 个人没有用过python,不过我觉得语音只是一个工具而已,不同的开发,采用不同的语音,开发效率和运行效率都会有所不同,采用你熟悉的快捷的高效的
> 语言即可。
> >
>

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 怎么解码混合编码的中英文混合字符串?

忘了说了,发附件,不要直接贴内容:-)

2009/3/20 cnhack TNT <cnhacktnt@gmail.com>
能否将你取得的一个 tag 样例信息导出到文本文件,然后发上来
另外,你可以 hexdump 一下这个文件,因为UTF-16LE是双字节编码,如果是混合编码,有可能看到的字节数为奇数(多看几个出问题的文件,因为非utf-16le编码的字符其字节个数可能刚好凑够偶数个)




2009/3/20 Calvin <calvin.ngei@gmail.com>

最近在处理一些 wma 文件的 tag,遇到这样的问题,非常棘手。

从网上搜索到的资料说,默认微软 wma 格式音频文件的 tag 是用 utf-16le 编码的。

我用 Audio::WMA 取得 tag 信息,用 utf-16le decode后,汉字解码正常,凡是遇到夹杂在中文字串中的英文字母或者短横
之类的符号就乱码(显示成不正确的汉字或奇怪的符号)。如果用 latin1 或 gbk 来 decode,则所有汉字显示乱码,而夹杂在汉字里面的
英文字母和符号显示正常。

怀疑这些字符串是混合编码的,汉字使用 utf-16le 编码,而英文字母和符号使用 latin1 编码,然后凑成一个完整的字符串。究竟是不是这
样呢?还是 perl 对 utf-16le 解码本身有 bug?

这样的字符串怎样才能正确解码呢?

如果是混合编码的话,作为模拟,一下脚本是一个实验:

#!/usr/bin/perl
use Encode;

$s1="出征进行曲";
$s1=decode_utf8($s1);
$s1=encode('utf-16le',$s1); #直接这样编码成 utf-16le是完全没问题的
$s2="-AFtest-第4曲";
$s2=decode_utf8($s2);
$s2=encode('gbk',$s2); #直接这样编码成 gbk 也是完全没问题的
$string=$s1.$s2; #这里,为了模拟,制作了一个混合编码字串

$aa=decode('utf-16le',$string); # 这里,用 utf-16le 解码
$aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
print "$aa\n"; #这里,原 $s1 部分解码正常,原 $s2 部分乱码

$aa=decode('gbk',$string); # 这里,用 gbk 解码
$aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
print "$aa\n"; #这里,原 $s1 部分乱码,原 $s2 部分显示正常

如何让整个 $string 都正确解码呢?




--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 怎么解码混合编码的中英文混合字符串?

能否将你取得的一个 tag 样例信息导出到文本文件,然后发上来
另外,你可以 hexdump 一下这个文件,因为UTF-16LE是双字节编码,如果是混合编码,有可能看到的字节数为奇数(多看几个出问题的文件,因为非utf-16le编码的字符其字节个数可能刚好凑够偶数个)




2009/3/20 Calvin <calvin.ngei@gmail.com>
最近在处理一些 wma 文件的 tag,遇到这样的问题,非常棘手。

从网上搜索到的资料说,默认微软 wma 格式音频文件的 tag 是用 utf-16le 编码的。

我用 Audio::WMA 取得 tag 信息,用 utf-16le decode后,汉字解码正常,凡是遇到夹杂在中文字串中的英文字母或者短横
之类的符号就乱码(显示成不正确的汉字或奇怪的符号)。如果用 latin1 或 gbk 来 decode,则所有汉字显示乱码,而夹杂在汉字里面的
英文字母和符号显示正常。

怀疑这些字符串是混合编码的,汉字使用 utf-16le 编码,而英文字母和符号使用 latin1 编码,然后凑成一个完整的字符串。究竟是不是这
样呢?还是 perl 对 utf-16le 解码本身有 bug?

这样的字符串怎样才能正确解码呢?

如果是混合编码的话,作为模拟,一下脚本是一个实验:

#!/usr/bin/perl
use Encode;

$s1="出征进行曲";
$s1=decode_utf8($s1);
$s1=encode('utf-16le',$s1); #直接这样编码成 utf-16le是完全没问题的
$s2="-AFtest-第4曲";
$s2=decode_utf8($s2);
$s2=encode('gbk',$s2); #直接这样编码成 gbk 也是完全没问题的
$string=$s1.$s2; #这里,为了模拟,制作了一个混合编码字串

$aa=decode('utf-16le',$string); # 这里,用 utf-16le 解码
$aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
print "$aa\n"; #这里,原 $s1 部分解码正常,原 $s2 部分乱码

$aa=decode('gbk',$string); # 这里,用 gbk 解码
$aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
print "$aa\n"; #这里,原 $s1 部分乱码,原 $s2 部分显示正常

如何让整个 $string 都正确解码呢?



--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: Perl vs Python

Haskell 很美丽,美丽到什么程度?
美丽到 Python 见了她之后,就开始学着像 Perl 一样说自己很实用了。

2009/3/5 Michael Zeng <galaxy2004@gmail.com>:
> Haskell  是干啥的, 大牛解释一下
>

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: Perl vs Python

me too,三年方有感觉。

2009/3/5 agentzh <agentzh@gmail.com>:
> 2009/3/5 smallfish <perluo777@gmail.com>
>>
>> 百度下。一种函数式编程语言。很牛x的说,可惜我看了几天是一头雾水,太过深奥,有点接受不了它的描述方式。
>
> 呵呵,Larry 一次在 Perl 6 核心小组的电话会议上说他下决心学了 8 次才对 Haskell 有些感觉。。。我则学了好几个年头才上手。。。呵呵
>
> -agentzh

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的

use Encode; use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/; $string="出征 进行曲"; $decoder = guess_encoding($string);

这里 guess 出来的 decoder 不是一个对象(也就是 bless 过的引用),而是一个标量(utf-8-strict or utf8),说明不需要再做 decode 了。所以应该用 ref 来判断一下,是否确实得到了一个 object。否则就不必调用所谓的 decode 方法了。

如果把 use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/; 换成 use Encode::Guess qw/utf8 euc-cn gbk utf-16le/; 就可以解码了,这个Okàjn 和 tian yazhou 都介绍了。

decode 之后不能直接打印,否则导致 wide char 警告,必须先做 encode 才行,这个 cnhacktnt 已经介绍了。

在另一个邮件里面拼接的字符串应该无法 guess 了。

2009/3/20 Calvin <calvin.ngei@gmail.com>
这样是完全没有问题的,可以把UTF8的str直接用gbk编码(不信的话你再用gbk解码字串还是正确的)。
错误不在这一步,在 Encode::Guess那里。

On 3月20日, 下午2时11分, Okàjn <okajn...@gmail.com> wrote:
> $string=decode_utf8($string);之后是UTF8的str了,再用gbk编码肯定是不对的啊,
> 如果想把utf8的字符串转换成gbk的字符串,可以用Unicode::Map转嘛
>
> 2009/3/20 Calvin <calvin.n...@gmail.com>
>
> > 仍然没有解决标题涉及的问题。
> > 即使用 $string=decode_utf8($string) 先标记让perl明白它是一个字串,用 Encode::Guess 猜编
> > 码仍然出错,比如下面的脚本:
>
> > #!/usr/bin/perl
> > use Encode;
> > use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
> > $string="出征进行曲";
> > $string=decode_utf8($string);
> > $string=encode('gbk',$string);
> > print $string;
> > $decoder=guess_encoding($string);
> > $info=$decoder->decode($string);
> > print "$info\n";
>
> > 这里运行的错误仍然如下:
> > Can't locate object method "decode" via package "euc-cn or cp936 or
> > UTF-16LE" (perhaps you forgot to load "euc-cn or cp936 or UTF-16LE"?)
> > at ./test.pl line 9.
>
> > 这里 Encode::Guess 遇到了问题,不知道究竟是怎么回事。
>
> > On 3月20日, 上午10时29分, dustin <li.dus...@berrymail.cn> wrote:
> > > 写得太好了,受益匪浅啊!
>
> > > Sent via BlackBerry(R) by BerryMail



--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: Perl vs Python

一叶障目,不见泰山。
什么时候轮到 Python 当主流了。Perl 和 Python 都是非主流,非主流们就不要互相吵吵了。

Python 用户如果不老打广告的话,还是蛮可爱的。

2009/3/4 Michael Zeng <galaxy2004@gmail.com>:
>  有空  还是想学学python,毕竟是现在主流语言
>

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 原创脚本--抓取需要登录后才能看到的页面

晕,LWP 又不是不支持 cookie,费这么大劲,至于么。

$ua->cookie_jar( {} );

从此王子和公主一起过着快乐的生活……

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] 怎么解码混合编码的中英文混合字符串?

最近在处理一些 wma 文件的 tag,遇到这样的问题,非常棘手。

从网上搜索到的资料说,默认微软 wma 格式音频文件的 tag 是用 utf-16le 编码的。

我用 Audio::WMA 取得 tag 信息,用 utf-16le decode后,汉字解码正常,凡是遇到夹杂在中文字串中的英文字母或者短横
之类的符号就乱码(显示成不正确的汉字或奇怪的符号)。如果用 latin1 或 gbk 来 decode,则所有汉字显示乱码,而夹杂在汉字里面的
英文字母和符号显示正常。

怀疑这些字符串是混合编码的,汉字使用 utf-16le 编码,而英文字母和符号使用 latin1 编码,然后凑成一个完整的字符串。究竟是不是这
样呢?还是 perl 对 utf-16le 解码本身有 bug?

这样的字符串怎样才能正确解码呢?

如果是混合编码的话,作为模拟,一下脚本是一个实验:

#!/usr/bin/perl
use Encode;

$s1="出征进行曲";
$s1=decode_utf8($s1);
$s1=encode('utf-16le',$s1); #直接这样编码成 utf-16le是完全没问题的
$s2="-AFtest-第4曲";
$s2=decode_utf8($s2);
$s2=encode('gbk',$s2); #直接这样编码成 gbk 也是完全没问题的
$string=$s1.$s2; #这里,为了模拟,制作了一个混合编码字串

$aa=decode('utf-16le',$string); # 这里,用 utf-16le 解码
$aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
print "$aa\n"; #这里,原 $s1 部分解码正常,原 $s2 部分乱码

$aa=decode('gbk',$string); # 这里,用 gbk 解码
$aa=encode('utf8', $aa); #这里,让 perl 去掉标签,不会打印Wide character的警告
print "$aa\n"; #这里,原 $s1 部分乱码,原 $s2 部分显示正常

如何让整个 $string 都正确解码呢?
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的

这样是完全没有问题的,可以把UTF8的str直接用gbk编码(不信的话你再用gbk解码字串还是正确的)。
错误不在这一步,在 Encode::Guess那里。

On 3月20日, 下午2时11分, Okàjn <okajn...@gmail.com> wrote:
> $string=decode_utf8($string);之后是UTF8的str了,再用gbk编码肯定是不对的啊,
> 如果想把utf8的字符串转换成gbk的字符串,可以用Unicode::Map转嘛
>
> 2009/3/20 Calvin <calvin.n...@gmail.com>
>
> > 仍然没有解决标题涉及的问题。
> > 即使用 $string=decode_utf8($string) 先标记让perl明白它是一个字串,用 Encode::Guess 猜编
> > 码仍然出错,比如下面的脚本:
>
> > #!/usr/bin/perl
> > use Encode;
> > use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
> > $string="出征进行曲";
> > $string=decode_utf8($string);
> > $string=encode('gbk',$string);
> > print $string;
> > $decoder=guess_encoding($string);
> > $info=$decoder->decode($string);
> > print "$info\n";
>
> > 这里运行的错误仍然如下:
> > Can't locate object method "decode" via package "euc-cn or cp936 or
> > UTF-16LE" (perhaps you forgot to load "euc-cn or cp936 or UTF-16LE"?)
> > at ./test.pl line 9.
>
> > 这里 Encode::Guess 遇到了问题,不知道究竟是怎么回事。
>
> > On 3月20日, 上午10时29分, dustin <li.dus...@berrymail.cn> wrote:
> > > 写得太好了,受益匪浅啊!
>
> > > Sent via BlackBerry(R) by BerryMail
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

2009年3月19日星期四

[PerlChina] Re: 使用 Encode::Guess 遇到的錯誤



2009/3/20 Calvin <calvin.ngei@gmail.com>:
> 可是,即使用 $string=decode_utf8($string) 先标记让perl明白它是一个字串,用 Encode::Guess 猜编
> 码仍然出错,比如下面的脚本:
>
> #!/usr/bin/perl
> use Encode;
> use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
> $string="出征进行曲";
> $string=decode_utf8($string);
> $string=encode('gbk',$string);
> print $string;
> $decoder=guess_encoding($string);
> $info=$decoder->decode($string);
> print "$info\n";
>
> 这里运行的错误仍然如下:
> Can't locate object method "decode" via package "euc-cn or cp936 or
> UTF-16LE" (perhaps you forgot to load "euc-cn or cp936 or UTF-16LE"?)
> at ./test.pl line 9.
>
=head1 说明
我稍微改了下你的脚本,你看看
=cut

use Encode;
 
# 可能的编码个数越少越好,我不清楚euc-cn和gbk是什么关系,有人知道么?
# 我发现去掉gbk好像还是可以猜测出来的
# 但是加上以后,guess encoding那一步就会失败
use Encode::Guess qw/utf8 euc-cn gbk/;

#@list = Encode->encodings('Encode::CN');
#foreach(@list){
#    print;
#    print "\n";
#}

# 这里的字符串要够长才会比较准确,我在Encode::Guess的doc里面看到的
$string="出征进行曲阿似的阿阿似的发就哦阿发阿地方就阿阿姐防火墙喔喔去哦去恶气外婆千万千万放进去全家福气氛清华发送到发灰色的阿斯拉夫哈似的发哦发达哈阿发达抵抗力萨回到发思考发达克拉发哈利税分流喀什地方金卡方鸿渐阿叔地方金卡是地方起方法瓦斯大家宋江阿飞>垃圾阿发所发所发似的发所发所发发阿发达地方阿阿发的阿发发达发达发达";

#$string = encode('cp936', decode('utf8', $string));  这个应该不需要,因为这个时候string已经是Perl内部格式了
$string_en = encode('euc-cn',  $string);

print $string_en, ' ', $string, "\n";
$decoder=guess_encoding($string_en, qw/utf8 euc-cn gbk/);
use Data::Dumper;
print Dumper $decoder;

# 你少了这一步,这个是必须的
# 你的那个错误就是因为ref($decoder)是空值,也就是说猜测失败了
ref($decoder) or die "Can not determine\n";
print "I guess it's ", $decoder->name, "\n";

# 我在这里有个问题,及时猜测成功,这里在utf8编码的gnome-terminal下面打印出来的结果依然是乱码
# 真是奇怪,期待大牛出来解答
$info=$decoder->decode($string_en);
print "$info\n";


--
You should be the change you wish to see in the world


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] ONLINE FUNNY SEX VIDEOS FREE SEXY TIPS GIVEN

ONLINE FUNNY SEX VIDEOS FREE SEXY TIPS GIVEN

SEXY ONLINE NUDE VIDEOS COLLECTIONS SUPER

************************************

www.funnywworld.com
www.funnywworld.com

************************************
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的

$string=decode_utf8($string);之后是UTF8的str了,再用gbk编码肯定是不对的啊,
如果想把utf8的字符串转换成gbk的字符串,可以用Unicode::Map转嘛

2009/3/20 Calvin <calvin.ngei@gmail.com>
仍然没有解决标题涉及的问题。
即使用 $string=decode_utf8($string) 先标记让perl明白它是一个字串,用 Encode::Guess 猜编
码仍然出错,比如下面的脚本:

#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=decode_utf8($string);
$string=encode('gbk',$string);
print $string;
$decoder=guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

这里运行的错误仍然如下:
Can't locate object method "decode" via package "euc-cn or cp936 or
UTF-16LE" (perhaps you forgot to load "euc-cn or cp936 or UTF-16LE"?)
at ./test.pl line 9.

这里 Encode::Guess 遇到了问题,不知道究竟是怎么回事。

On 3月20日, 上午10时29分, dustin <li.dus...@berrymail.cn> wrote:
> 写得太好了,受益匪浅啊!
>
> Sent via BlackBerry(R) by BerryMail



--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的

仍然没有解决标题涉及的问题。
即使用 $string=decode_utf8($string) 先标记让perl明白它是一个字串,用 Encode::Guess 猜编
码仍然出错,比如下面的脚本:

#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=decode_utf8($string);
$string=encode('gbk',$string);
print $string;
$decoder=guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

这里运行的错误仍然如下:
Can't locate object method "decode" via package "euc-cn or cp936 or
UTF-16LE" (perhaps you forgot to load "euc-cn or cp936 or UTF-16LE"?)
at ./test.pl line 9.

这里 Encode::Guess 遇到了问题,不知道究竟是怎么回事。

On 3月20日, 上午10时29分, dustin <li.dus...@berrymail.cn> wrote:
> 写得太好了,受益匪浅啊!
>
> Sent via BlackBerry(R) by BerryMail
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

可是,即使用 $string=decode_utf8($string) 先标记让perl明白它是一个字串,用 Encode::Guess 猜编
码仍然出错,比如下面的脚本:

#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=decode_utf8($string);
$string=encode('gbk',$string);
print $string;
$decoder=guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

这里运行的错误仍然如下:
Can't locate object method "decode" via package "euc-cn or cp936 or
UTF-16LE" (perhaps you forgot to load "euc-cn or cp936 or UTF-16LE"?)
at ./test.pl line 9.

On 3月20日, 上午9时42分, cnhack TNT <cnhack...@gmail.com> wrote:
> 首先,需要分清楚"字符(character)"和"字节流(Octet
> stream)"的概念,你的perl程序所取到的输入,以及它对外的输出(就像你用print打印)都是字节流,字节流是没有语义的,对perl来说它就是一堆字节,没有额外的意义。
> 而字符串和字节流是不同的,字符串有语义,它代表某个或某些个字符,直白来说,我们看到的"abcd1234"等等都是字符。而字节流可以用来表示字符串,同一个字符串,它对应的字节流可以不同,为什么呢?因为同一个字符串可以用不同的编码方式(如utf8或gb2312)来编码,编码过后得到的,便是相对应的字节流。
> 在perl中,你输入的一个字符串是以字节流的形式传递给perl的,如果你想perl把你输入的字符串真正当成字符串来理解和操作,你需要告诉perl这串字符的编码是什么,比如(我的环境为utf8):
>
> use Encode;
> $string="中国";
> $string_decoded=decode_utf8($string);
>
> 此时,$string
> 对perl来说只是用utf8编码过的字节流(十六进制为\xE4\xB8\xAD\xE5\x9B\xBD),这个时候,perl只会按字节来对他操作,因为perl不知道它是啥东西。
> 而 $string_decoded
> 对perl来说就是有语义的字符串了,虽然他本身在perl内部是以UTF8编码的方式存储的,但是它已经被打上了标记,perl知道它是字符串,该按字符来操作,此时如果你用substr之类的函数对
> $string_decoded 操作的话,便是按 "中(\xE4\xB8\xAD)","国(\xE5\x9B\xBD)" 两个字符来操作了,而不是在未
> decode 之前,以一个字节一个字节的方式处理。
>
> 在输出的时候,我们应该仍以字节流的方式输出,因为字符只是一个概念,一个具象,它可以有不同的表现形式(不同编码的字节流),这个时候你可以根据下一个需要取得你这个输出作为输入的目标程序的要求(网络要求,编码要求),来对你的输出进行编码(成字节流),然后再传输给它。所以这个时候,你需要对需要输出的字符串进行
> encode,比如:
>
> use Encode;
> $string="中国";
> $string_decoded=decode_utf8($string);
> $string_encoded=encode("gb2312", $string_decoded);
> print $string_encoded;
>
> 这个时候, $string_encoded 中便是以 gb2312 编码方式编码过的字节流了(它同样代表"中国"这个字符串)。
> 如果你直接输出 $string_decoded 而不做 encode 的话,perl
> 便会按这个字符串在其内存中保存的方式(也就是utf8)输出,如果你是 utf8
> 的环境,你可以看到正确的字符串,但如果你这个字符串里面一旦包含了大于\xFF的字节,那么perl会警告"Wide character in
> print..."。那为什么我 encode
> 了这个字符串后perl不会报这个警告呢?那是因为perl会对"字符串"做标记,decode会打上标记,encode后会去掉这个标记,一旦你输出的时候有这个标记,并且有字节大于\xFF,perl就会丢出那个警告,下次你看到这个警告,一眼就可以看出是因为你程序的某个输出没有经过编码转换成字节流的缘故的。
>
> 呃。。。我是不是有点太罗嗦了。。。
> Anyway, 希望大家对 Perl 的 encoding 有个了解。
>
> 2009/3/19 Okàjn <okajn...@gmail.com>
>
> > 这么写本身就有点问题吧,encode实际是str2bytes,
>
> > $string = "出征进行曲";
> > 代码里明文写出的字符串就是以bytes存在$string中,不应该对$string再encode
>
> > 2009/3/19 Calvin <calvin.n...@gmail.com>
>
> >> 你試試把下面的存為 utf8文件執行一下:
>
> >> #!/usr/bin/perl
> >> use Encode;
> >> use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
> >> $string="出征进行曲";
> >> $string=encode('gbk',$string);
> >> $decoder = guess_encoding($string);
> >> $info=$decoder->decode($string);
> >> print "$info\n";
>
> >> On 3月19日, 下午9时24分, Okàjn <okajn...@gmail.com> wrote:
> >> > use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> >> > 改为
> >> > use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
>
> >> > 运行结果:
>
> >> > Wide character in print at ./test.pl line 7.
> >> > 出征进行曲
>
> >> > 2009/3/19 Calvin <calvin.n...@gmail.com>
>
> >> > > 按照網上搜索到的 Encode:;Guess 的資料,寫了個 test.pl,內容:
>
> >> > > #!/usr/bin/perl
>
> >> > > use Encode;
> >> > > use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> >> > > $string="出征进行曲";
> >> > > $decoder = guess_encoding($string);
> >> > > $info=$decoder->decode($string);
> >> > > print "$info\n";
>
> >> > > 這個 test.pl 保存成 utf8 txt檔案,執行,出錯:
>
> >> > > Can't locate object method "decode" via package "utf-8-strict or
> >> > > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> >> > > test.pl line 6.
>
> >> > > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

确实应该说大于\xFF的字,而不是字节。

2009/3/20 msmouse <msmouse@gmail.com>
收到。实测了下确实可以打印127以上的字节而不引发warning。
不过貌似不该用“大于\xFF的字节”的说法。

----------------------------------
msmouse@ir.hit.edu.cn
msmouse@gmail.com


2009/3/20 cnhack TNT <cnhacktnt@gmail.com>
指的是 \xFF, 大于255,Unicode 的码值范围比一个字节能表示的大多了



2009/3/20 msmouse <msmouse@gmail.com>
高人讲得清晰。
另最后一段的\xFF是否指\x80 ?
----------------------------------
msmouse@ir.hit.edu.cn
msmouse@gmail.com


> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?


















--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的錯誤

收到。实测了下确实可以打印127以上的字节而不引发warning。
不过貌似不该用"大于\xFF的字节"的说法。
----------------------------------
msmouse@ir.hit.edu.cn
msmouse@gmail.com


2009/3/20 cnhack TNT <cnhacktnt@gmail.com>
指的是 \xFF, 大于255,Unicode 的码值范围比一个字节能表示的大多了


2009/3/20 msmouse <msmouse@gmail.com>
高人讲得清晰。
另最后一段的\xFF是否指\x80 ?
----------------------------------
msmouse@ir.hit.edu.cn
msmouse@gmail.com


> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?















--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

用 blt 跟踪 twitter 的话,可以应用一下这个技术:

s/twitter_following($last_fetch)/encode('utf-8‘,twitter_following($last_fetch))/

当然还要 use Encode;
从而避免每次 blt -Sc 都看到警告。

2009/3/20 cnhack TNT <cnhacktnt@gmail.com>
指的是 \xFF, 大于255,Unicode 的码值范围比一个字节能表示的大多了


2009/3/20 msmouse <msmouse@gmail.com>
高人讲得清晰。
另最后一段的\xFF是否指\x80 ?
----------------------------------
msmouse@ir.hit.edu.cn
msmouse@gmail.com


> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?















--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

指的是 \xFF, 大于255,Unicode 的码值范围比一个字节能表示的大多了


2009/3/20 msmouse <msmouse@gmail.com>
高人讲得清晰。
另最后一段的\xFF是否指\x80 ?
----------------------------------
msmouse@ir.hit.edu.cn
msmouse@gmail.com


> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?












--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

敬业精神,值得学习~~

2009/3/20 cnhack TNT <cnhacktnt@gmail.com>
首先,需要分清楚“字符(character)”和“字节流(Octet stream)”的概念,你的perl程序所取到的输入,以及它对外的输出(就像你用print打印)都是字节流,字节流是没有语义的,对perl来说它就是一堆字节,没有额外的意义。
而字符串和字节流是不同的,字符串有语义,它代表某个或某些个字符,直白来说,我们看到的“abcd1234“等等都是字符。而字节流可以用来表示字符串,同一个字符串,它对应的字节流可以不同,为什么呢?因为同一个字符串可以用不同的编码方式(如utf8或gb2312)来编码,编码过后得到的,便是相对应的字节流。
在perl中,你输入的一个字符串是以字节流的形式传递给perl的,如果你想perl把你输入的字符串真正当成字符串来理解和操作,你需要告诉perl这串字符的编码是什么,比如(我的环境为utf8):

use Encode;
$string="中国";
$string_decoded=decode_utf8($string);

此时,$string 对perl来说只是用utf8编码过的字节流(十六进制为\xE4\xB8\xAD\xE5\x9B\xBD),这个时候,perl只会按字节来对他操作,因为perl不知道它是啥东西。
而 $string_decoded 对perl来说就是有语义的字符串了,虽然他本身在perl内部是以UTF8编码的方式存储的,但是它已经被打上了标记,perl知道它是字符串,该按字符来操作,此时如果你用substr之类的函数对 $string_decoded 操作的话,便是按 “中(\xE4\xB8\xAD)”,“国(\xE5\x9B\xBD)” 两个字符来操作了,而不是在未 decode 之前,以一个字节一个字节的方式处理。

在输出的时候,我们应该仍以字节流的方式输出,因为字符只是一个概念,一个具象,它可以有不同的表现形式(不同编码的字节流),这个时候你可以根据下一个需要取得你这个输出作为输入的目标程序的要求(网络要求,编码要求),来对你的输出进行编码(成字节流),然后再传输给它。所以这个时候,你需要对需要输出的字符串进行 encode,比如:

use Encode;
$string="中国";
$string_decoded=decode_utf8($string);
$string_encoded=encode("gb2312", $string_decoded);
print $string_encoded;

这个时候, $string_encoded 中便是以 gb2312 编码方式编码过的字节流了(它同样代表“中国”这个字符串)。
如果你直接输出 $string_decoded 而不做 encode 的话,perl 便会按这个字符串在其内存中保存的方式(也就是utf8)输出,如果你是 utf8 的环境,你可以看到正确的字符串,但如果你这个字符串里面一旦包含了大于\xFF的字节,那么perl会警告"Wide character in print..."。那为什么我 encode 了这个字符串后perl不会报这个警告呢?那是因为perl会对“字符串”做标记,decode会打上标记,encode后会去掉这个标记,一旦你输出的时候有这个标记,并且有字节大于\xFF,perl就会丢出那个警告,下次你看到这个警告,一眼就可以看出是因为你程序的某个输出没有经过编码转换成字节流的缘故的。


呃。。。我是不是有点太罗嗦了。。。
Anyway, 希望大家对 Perl 的 encoding 有个了解。



2009/3/19 Okàjn <okajn.cn@gmail.com>

这么写本身就有点问题吧,encode实际是str2bytes,

$string = "出征进行曲";
代码里明文写出的字符串就是以bytes存在$string中,不应该对$string再encode


2009/3/19 Calvin <calvin.ngei@gmail.com>


你試試把下面的存為 utf8文件執行一下:

#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=encode('gbk',$string);
$decoder = guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

On 3月19日, 下午9时24分, Okàjn <okajn...@gmail.com> wrote:
> use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> 改为
> use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
>
> 运行结果:
>
> Wide character in print at ./test.pl line 7.
> 出征进行曲
>
> 2009/3/19 Calvin <calvin.n...@gmail.com>
>
> > 按照網上搜索到的 Encode:;Guess 的資料,寫了個 test.pl,內容:
>
> > #!/usr/bin/perl
>
> > use Encode;
> > use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> > $string="出征进行曲";
> > $decoder = guess_encoding($string);
> > $info=$decoder->decode($string);
> > print "$info\n";
>
> > 這個 test.pl 保存成 utf8 txt檔案,執行,出錯:
>
> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?









--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

拜谢,讲的真清楚啊!

2009/3/20 cnhack TNT <cnhacktnt@gmail.com>
首先,需要分清楚“字符(character)”和“字节流(Octet stream)”的概念,你的perl程序所取到的输入,以及它对外的输出(就像你用print打印)都是字节流,字节流是没有语义的,对perl来说它就是一堆字节,没有额外的意义。
而字符串和字节流是不同的,字符串有语义,它代表某个或某些个字符,直白来说,我们看到的“abcd1234“等等都是字符。而字节流可以用来表示字符串,同一个字符串,它对应的字节流可以不同,为什么呢?因为同一个字符串可以用不同的编码方式(如utf8或gb2312)来编码,编码过后得到的,便是相对应的字节流。
在perl中,你输入的一个字符串是以字节流的形式传递给perl的,如果你想perl把你输入的字符串真正当成字符串来理解和操作,你需要告诉perl这串字符的编码是什么,比如(我的环境为utf8):

use Encode;
$string="中国";
$string_decoded=decode_utf8($string);

此时,$string 对perl来说只是用utf8编码过的字节流(十六进制为\xE4\xB8\xAD\xE5\x9B\xBD),这个时候,perl只会按字节来对他操作,因为perl不知道它是啥东西。
而 $string_decoded 对perl来说就是有语义的字符串了,虽然他本身在perl内部是以UTF8编码的方式存储的,但是它已经被打上了标记,perl知道它是字符串,该按字符来操作,此时如果你用substr之类的函数对 $string_decoded 操作的话,便是按 “中(\xE4\xB8\xAD)”,“国(\xE5\x9B\xBD)” 两个字符来操作了,而不是在未 decode 之前,以一个字节一个字节的方式处理。

在输出的时候,我们应该仍以字节流的方式输出,因为字符只是一个概念,一个具象,它可以有不同的表现形式(不同编码的字节流),这个时候你可以根据下一个需要取得你这个输出作为输入的目标程序的要求(网络要求,编码要求),来对你的输出进行编码(成字节流),然后再传输给它。所以这个时候,你需要对需要输出的字符串进行 encode,比如:

use Encode;
$string="中国";
$string_decoded=decode_utf8($string);
$string_encoded=encode("gb2312", $string_decoded);
print $string_encoded;

这个时候, $string_encoded 中便是以 gb2312 编码方式编码过的字节流了(它同样代表“中国”这个字符串)。
如果你直接输出 $string_decoded 而不做 encode 的话,perl 便会按这个字符串在其内存中保存的方式(也就是utf8)输出,如果你是 utf8 的环境,你可以看到正确的字符串,但如果你这个字符串里面一旦包含了大于\xFF的字节,那么perl会警告"Wide character in print..."。那为什么我 encode 了这个字符串后perl不会报这个警告呢?那是因为perl会对“字符串”做标记,decode会打上标记,encode后会去掉这个标记,一旦你输出的时候有这个标记,并且有字节大于\xFF,perl就会丢出那个警告,下次你看到这个警告,一眼就可以看出是因为你程序的某个输出没有经过编码转换成字节流的缘故的。


呃。。。我是不是有点太罗嗦了。。。
Anyway, 希望大家对 Perl 的 encoding 有个了解。



2009/3/19 Okàjn <okajn.cn@gmail.com>

这么写本身就有点问题吧,encode实际是str2bytes,

$string = "出征进行曲";
代码里明文写出的字符串就是以bytes存在$string中,不应该对$string再encode


2009/3/19 Calvin <calvin.ngei@gmail.com>


你試試把下面的存為 utf8文件執行一下:

#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=encode('gbk',$string);
$decoder = guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

On 3月19日, 下午9时24分, Okàjn <okajn...@gmail.com> wrote:
> use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> 改为
> use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
>
> 运行结果:
>
> Wide character in print at ./test.pl line 7.
> 出征进行曲
>
> 2009/3/19 Calvin <calvin.n...@gmail.com>
>
> > 按照網上搜索到的 Encode:;Guess 的資料,寫了個 test.pl,內容:
>
> > #!/usr/bin/perl
>
> > use Encode;
> > use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> > $string="出征进行曲";
> > $decoder = guess_encoding($string);
> > $info=$decoder->decode($string);
> > print "$info\n";
>
> > 這個 test.pl 保存成 utf8 txt檔案,執行,出錯:
>
> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?










--
凡事包容,凡事相信,凡事盼望,凡事忍耐。

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的錯誤

高人讲得清晰。
另最后一段的\xFF是否指\x80 ?
----------------------------------
msmouse@ir.hit.edu.cn
msmouse@gmail.com


2009/3/20 cnhack TNT <cnhacktnt@gmail.com>
首先,需要分清楚"字符(character)"和"字节流(Octet stream)"的概念,你的perl程序所取到的输入,以及它对外的输出(就像你用print打印)都是字节流,字节流是没有语义的,对perl来说它就是一堆字节,没有额外的意义。
而字符串和字节流是不同的,字符串有语义,它代表某个或某些个字符,直白来说,我们看到的"abcd1234"等等都是字符。而字节流可以用来表示字符串,同一个字符串,它对应的字节流可以不同,为什么呢?因为同一个字符串可以用不同的编码方式(如utf8或gb2312)来编码,编码过后得到的,便是相对应的字节流。
在perl中,你输入的一个字符串是以字节流的形式传递给perl的,如果你想perl把你输入的字符串真正当成字符串来理解和操作,你需要告诉perl这串字符的编码是什么,比如(我的环境为utf8):

use Encode;
$string="中国";
$string_decoded=decode_utf8($string);

此时,$string 对perl来说只是用utf8编码过的字节流(十六进制为\xE4\xB8\xAD\xE5\x9B\xBD),这个时候,perl只会按字节来对他操作,因为perl不知道它是啥东西。
而 $string_decoded 对perl来说就是有语义的字符串了,虽然他本身在perl内部是以UTF8编码的方式存储的,但是它已经被打上了标记,perl知道它是字符串,该按字符来操作,此时如果你用substr之类的函数对 $string_decoded 操作的话,便是按 "中(\xE4\xB8\xAD)","国(\xE5\x9B\xBD)" 两个字符来操作了,而不是在未 decode 之前,以一个字节一个字节的方式处理。

在输出的时候,我们应该仍以字节流的方式输出,因为字符只是一个概念,一个具象,它可以有不同的表现形式(不同编码的字节流),这个时候你可以根据下一个需要取得你这个输出作为输入的目标程序的要求(网络要求,编码要求),来对你的输出进行编码(成字节流),然后再传输给它。所以这个时候,你需要对需要输出的字符串进行 encode,比如:

use Encode;
$string="中国";
$string_decoded=decode_utf8($string);
$string_encoded=encode("gb2312", $string_decoded);
print $string_encoded;

这个时候, $string_encoded 中便是以 gb2312 编码方式编码过的字节流了(它同样代表"中国"这个字符串)。
如果你直接输出 $string_decoded 而不做 encode 的话,perl 便会按这个字符串在其内存中保存的方式(也就是utf8)输出,如果你是 utf8 的环境,你可以看到正确的字符串,但如果你这个字符串里面一旦包含了大于\xFF的字节,那么perl会警告"Wide character in print..."。那为什么我 encode 了这个字符串后perl不会报这个警告呢?那是因为perl会对"字符串"做标记,decode会打上标记,encode后会去掉这个标记,一旦你输出的时候有这个标记,并且有字节大于\xFF,perl就会丢出那个警告,下次你看到这个警告,一眼就可以看出是因为你程序的某个输出没有经过编码转换成字节流的缘故的。


呃。。。我是不是有点太罗嗦了。。。
Anyway, 希望大家对 Perl 的 encoding 有个了解。



2009/3/19 Okàjn <okajn.cn@gmail.com>

这么写本身就有点问题吧,encode实际是str2bytes,

$string = "出征进行曲";
代码里明文写出的字符串就是以bytes存在$string中,不应该对$string再encode


2009/3/19 Calvin <calvin.ngei@gmail.com>


你試試把下面的存為 utf8文件執行一下:

#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=encode('gbk',$string);
$decoder = guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

On 3月19日, 下午9时24分, Okàjn <okajn...@gmail.com> wrote:
> use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> 改为
> use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
>
> 运行结果:
>
> Wide character in print at ./test.pl line 7.
> 出征进行曲
>
> 2009/3/19 Calvin <calvin.n...@gmail.com>
>
> > 按照網上搜索到的 Encode:;Guess 的資料,寫了個 test.pl,內容:
>
> > #!/usr/bin/perl
>
> > use Encode;
> > use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> > $string="出征进行曲";
> > $decoder = guess_encoding($string);
> > $info=$decoder->decode($string);
> > print "$info\n";
>
> > 這個 test.pl 保存成 utf8 txt檔案,執行,出錯:
>
> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?









--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

写得太好了,受益匪浅啊!

Sent via BlackBerry® by BerryMail
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

thanks a lot, 非常清晰的描述,让大家都明白什么是字节流,这个词选的很好,难以找出其他的替代。PerlIO 里面如此描述:

       :bytes
           This is the inverse of ":utf8" layer. It turns off the flag on the
           layer below so that data read from it is considered to be "octets"
           i.e. characters in range 0..255 only. Likewise on output perl will
           warn if a "wide" character is written to a such a stream.

perlrun 里面如此描述:

       -C [number/list]
            The "-C" flag controls some of the Perl Unicode features.

            As of 5.8.1, the "-C" can be followed either by a number or a list
            of option letters.  The letters, their numeric values, and effects
            are as follows; listing the letters is equal to summing the
            numbers.

                I     1   STDIN is assumed to be in UTF-8
                O     2   STDOUT will be in UTF-8
                E     4   STDERR will be in UTF-8

所以还可以用 -C 6 来关闭 "wide character" 警告。

更多的信息还可以参考 cnhacktnt 05 年在 perlchina 的演讲 unicode in 5 minute

2009/3/20 cnhack TNT <cnhacktnt@gmail.com>
首先,需要分清楚“字符(character)”和“字节流(Octet stream)”的概念,你的perl程序所取到的输入,以及它对外的输出(就像你用print打印)都是字节流,字节流是没有语义的,对perl来说它就是一堆字节,没有额外的意义。
而字符串和字节流是不同的,字符串有语义,它代表某个或某些个字符,直白来说,我们看到的“abcd1234“等等都是字符。而字节流可以用来表示字符串,同一个字符串,它对应的字节流可以不同,为什么呢?因为同一个字符串可以用不同的编码方式(如utf8或gb2312)来编码,编码过后得到的,便是相对应的字节流。
在perl中,你输入的一个字符串是以字节流的形式传递给perl的,如果你想perl把你输入的字符串真正当成字符串来理解和操作,你需要告诉perl这串字符的编码是什么,比如(我的环境为utf8):

use Encode;
$string="中国";
$string_decoded=decode_utf8($string);

此时,$string 对perl来说只是用utf8编码过的字节流(十六进制为\xE4\xB8\xAD\xE5\x9B\xBD),这个时候,perl只会按字节来对他操作,因为perl不知道它是啥东西。
而 $string_decoded 对perl来说就是有语义的字符串了,虽然他本身在perl内部是以UTF8编码的方式存储的,但是它已经被打上了标记,perl知道它是字符串,该按字符来操作,此时如果你用substr之类的函数对 $string_decoded 操作的话,便是按 “中(\xE4\xB8\xAD)”,“国(\xE5\x9B\xBD)” 两个字符来操作了,而不是在未 decode 之前,以一个字节一个字节的方式处理。

在输出的时候,我们应该仍以字节流的方式输出,因为字符只是一个概念,一个具象,它可以有不同的表现形式(不同编码的字节流),这个时候你可以根据下一个需要取得你这个输出作为输入的目标程序的要求(网络要求,编码要求),来对你的输出进行编码(成字节流),然后再传输给它。所以这个时候,你需要对需要输出的字符串进行 encode,比如:

use Encode;
$string="中国";
$string_decoded=decode_utf8($string);
$string_encoded=encode("gb2312", $string_decoded);
print $string_encoded;

这个时候, $string_encoded 中便是以 gb2312 编码方式编码过的字节流了(它同样代表“中国”这个字符串)。
如果你直接输出 $string_decoded 而不做 encode 的话,perl 便会按这个字符串在其内存中保存的方式(也就是utf8)输出,如果你是 utf8 的环境,你可以看到正确的字符串,但如果你这个字符串里面一旦包含了大于\xFF的字节,那么perl会警告"Wide character in print..."。那为什么我 encode 了这个字符串后perl不会报这个警告呢?那是因为perl会对“字符串”做标记,decode会打上标记,encode后会去掉这个标记,一旦你输出的时候有这个标记,并且有字节大于\xFF,perl就会丢出那个警告,下次你看到这个警告,一眼就可以看出是因为你程序的某个输出没有经过编码转换成字节流的缘故的。


呃。。。我是不是有点太罗嗦了。。。
Anyway, 希望大家对 Perl 的 encoding 有个了解。



2009/3/19 Okàjn <okajn.cn@gmail.com>

这么写本身就有点问题吧,encode实际是str2bytes,

$string = "出征进行曲";
代码里明文写出的字符串就是以bytes存在$string中,不应该对$string再encode


2009/3/19 Calvin <calvin.ngei@gmail.com>


你試試把下面的存為 utf8文件執行一下:

#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=encode('gbk',$string);
$decoder = guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

On 3月19日, 下午9时24分, Okàjn <okajn...@gmail.com> wrote:
> use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> 改为
> use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
>
> 运行结果:
>
> Wide character in print at ./test.pl line 7.
> 出征进行曲
>
> 2009/3/19 Calvin <calvin.n...@gmail.com>
>
> > 按照網上搜索到的 Encode:;Guess 的資料,寫了個 test.pl,內容:
>
> > #!/usr/bin/perl
>
> > use Encode;
> > use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> > $string="出征进行曲";
> > $decoder = guess_encoding($string);
> > $info=$decoder->decode($string);
> > print "$info\n";
>
> > 這個 test.pl 保存成 utf8 txt檔案,執行,出錯:
>
> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?









--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 4月北京 Perl 小组聚会 @speakers=();

allen wrote:
> 我想听的aengtzh的主题:
> # 使用 Test::Base 自动化测试任何语言编写的程序(包括 JavaScript 代码)
>
> # 介绍我的一个用 Perl 实现的从 Intel 手册到一个全功能的 x86 反汇编器的自动转换器(或者说写程序的程序)(Salent 项目中的
> IDU 子项目)
> # 回顾:我是如何"打进"国际 Perl 社区的
> # 如果谁用使用perl代替VBA编程的一些例子,我也想听听,最近我需要搞这方面的了
> 能不能不要在星期四呀,我每周的那天晚上有课。。。。。。

时间选择上没办法满足所有人。另外我们也会组织 social meetup (吃饭聊天),
到时你也可以参加。

Qiang

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 4月北京 Perl 小组聚会 @speakers=();

2009/3/19 allen <allenogz@gmail.com>
# 如果谁用使用perl代替VBA编程的一些例子,我也想听听,最近我需要搞这方面的了

这一块从前我也做过不少,主要是 Word 和 PowerPoint 的 s/VBA/Perl/ 自动化,虽然最近我两年已经不怎么搞了,但也还能简单喷一喷,哈哈!

-agentzh


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

首先,需要分清楚“字符(character)”和“字节流(Octet stream)”的概念,你的perl程序所取到的输入,以及它对外的输出(就像你用print打印)都是字节流,字节流是没有语义的,对perl来说它就是一堆字节,没有额外的意义。
而字符串和字节流是不同的,字符串有语义,它代表某个或某些个字符,直白来说,我们看到的“abcd1234“等等都是字符。而字节流可以用来表示字符串,同一个字符串,它对应的字节流可以不同,为什么呢?因为同一个字符串可以用不同的编码方式(如utf8或gb2312)来编码,编码过后得到的,便是相对应的字节流。
在perl中,你输入的一个字符串是以字节流的形式传递给perl的,如果你想perl把你输入的字符串真正当成字符串来理解和操作,你需要告诉perl这串字符的编码是什么,比如(我的环境为utf8):

use Encode;
$string="中国";
$string_decoded=decode_utf8($string);

此时,$string 对perl来说只是用utf8编码过的字节流(十六进制为\xE4\xB8\xAD\xE5\x9B\xBD),这个时候,perl只会按字节来对他操作,因为perl不知道它是啥东西。
而 $string_decoded 对perl来说就是有语义的字符串了,虽然他本身在perl内部是以UTF8编码的方式存储的,但是它已经被打上了标记,perl知道它是字符串,该按字符来操作,此时如果你用substr之类的函数对 $string_decoded 操作的话,便是按 “中(\xE4\xB8\xAD)”,“国(\xE5\x9B\xBD)” 两个字符来操作了,而不是在未 decode 之前,以一个字节一个字节的方式处理。

在输出的时候,我们应该仍以字节流的方式输出,因为字符只是一个概念,一个具象,它可以有不同的表现形式(不同编码的字节流),这个时候你可以根据下一个需要取得你这个输出作为输入的目标程序的要求(网络要求,编码要求),来对你的输出进行编码(成字节流),然后再传输给它。所以这个时候,你需要对需要输出的字符串进行 encode,比如:

use Encode;
$string="中国";
$string_decoded=decode_utf8($string);
$string_encoded=encode("gb2312", $string_decoded);
print $string_encoded;

这个时候, $string_encoded 中便是以 gb2312 编码方式编码过的字节流了(它同样代表“中国”这个字符串)。
如果你直接输出 $string_decoded 而不做 encode 的话,perl 便会按这个字符串在其内存中保存的方式(也就是utf8)输出,如果你是 utf8 的环境,你可以看到正确的字符串,但如果你这个字符串里面一旦包含了大于\xFF的字节,那么perl会警告"Wide character in print..."。那为什么我 encode 了这个字符串后perl不会报这个警告呢?那是因为perl会对“字符串”做标记,decode会打上标记,encode后会去掉这个标记,一旦你输出的时候有这个标记,并且有字节大于\xFF,perl就会丢出那个警告,下次你看到这个警告,一眼就可以看出是因为你程序的某个输出没有经过编码转换成字节流的缘故的。


呃。。。我是不是有点太罗嗦了。。。
Anyway, 希望大家对 Perl 的 encoding 有个了解。



2009/3/19 Okàjn <okajn.cn@gmail.com>
这么写本身就有点问题吧,encode实际是str2bytes,

$string = "出征进行曲";
代码里明文写出的字符串就是以bytes存在$string中,不应该对$string再encode


2009/3/19 Calvin <calvin.ngei@gmail.com>


你試試把下面的存為 utf8文件執行一下:

#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=encode('gbk',$string);
$decoder = guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

On 3月19日, 下午9时24分, Okàjn <okajn...@gmail.com> wrote:
> use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> 改为
> use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
>
> 运行结果:
>
> Wide character in print at ./test.pl line 7.
> 出征进行曲
>
> 2009/3/19 Calvin <calvin.n...@gmail.com>
>
> > 按照網上搜索到的 Encode:;Guess 的資料,寫了個 test.pl,內容:
>
> > #!/usr/bin/perl
>
> > use Encode;
> > use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> > $string="出征进行曲";
> > $decoder = guess_encoding($string);
> > $info=$decoder->decode($string);
> > print "$info\n";
>
> > 這個 test.pl 保存成 utf8 txt檔案,執行,出錯:
>
> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?






--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

这么写本身就有点问题吧,encode实际是str2bytes,

$string = "出征进行曲";
代码里明文写出的字符串就是以bytes存在$string中,不应该对$string再encode


2009/3/19 Calvin <calvin.ngei@gmail.com>

你試試把下面的存為 utf8文件執行一下:

#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=encode('gbk',$string);
$decoder = guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

On 3月19日, 下午9时24分, Okàjn <okajn...@gmail.com> wrote:
> use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> 改为
> use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
>
> 运行结果:
>
> Wide character in print at ./test.pl line 7.
> 出征进行曲
>
> 2009/3/19 Calvin <calvin.n...@gmail.com>
>
> > 按照網上搜索到的 Encode:;Guess 的資料,寫了個 test.pl,內容:
>
> > #!/usr/bin/perl
>
> > use Encode;
> > use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> > $string="出征进行曲";
> > $decoder = guess_encoding($string);
> > $info=$decoder->decode($string);
> > print "$info\n";
>
> > 這個 test.pl 保存成 utf8 txt檔案,執行,出錯:
>
> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?



--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 4月北京 Perl 小组聚会 @speakers=();

我想听的aengtzh的主题:
# 使用 Test::Base 自动化测试任何语言编写的程序(包括 JavaScript 代码)

# 介绍我的一个用 Perl 实现的从 Intel 手册到一个全功能的 x86 反汇编器的自动转换器(或者说写程序的程序)(Salent 项目中的
IDU 子项目)
# 回顾:我是如何"打进"国际 Perl 社区的
# 如果谁用使用perl代替VBA编程的一些例子,我也想听听,最近我需要搞这方面的了
能不能不要在星期四呀,我每周的那天晚上有课。。。。。。

于 2009-3-16 9:51, xu zhou 写道:
> niubility 阿
>
> 2009/3/15 agentzh <agentzh@gmail.com>:
>
>> 2009/3/13 Qiang (James) <shijialee@gmail.com>:
>>
>>> 有主题的朋友赶快出来晒一下吧!
>>>
>>>
>> 呵呵,我有许多(小)主题,大家可以多提意见和建议哈:
>>
>> # 我的历史案例分析:使用 LWP::UserAgent 爬取 Qzone 网站
>> # 使用 WWW::Curl 编写高性能的蜘蛛
>> # 使用 Test::Base 自动化测试任何语言编写的程序(包括 JavaScript 代码)
>> # VDOM.pm - 使用纯 Perl 操纵 Firefox/WebKit 构建的 HTML DOM
>> # 我的历史案例分析:Jifty 测试集中使用的类和对象的 mocking 测试技术
>> # 如何将一堆零散 Perl 代码转为一个可以上传到 CPAN 的 tar 包
>> # C++/JavaScript 中的 Perl Test::Simple 移植
>> # 我的历史案例分析:HTML::DOM + JavaScript::SpiderMonkey == AjaxPerl
>> # 介绍我的一个纯 Perl 实现的正则引擎实现(拥有 Perl, C, GraphViz 等多个后端,可生成 NFA,DFA,和最简 DFA 结构)
>> # 介绍我的一个从伪代码生成 PNG/Gif 格式的流程图的小编译器实现 FlowViz 项目
>> # 介绍我的一个用"元正则表达式"来解 AI 问题的解题引擎的编译器实现
>> # 介绍我的一个用 Perl 实现的任意复杂度的线性电路和某些非线性电路的解题系统 CirSys(后端使用 Maple 引擎来求解数学模型,通过我的
>> PerlMaple 模块)
>> # 介绍我的一个用 Perl 实现的高中立体几何定性证明系统 VRG (内置 NASA 的 CLIPS 正向推理机)
>> # 介绍我的一个用 Perl 实现的程序语义归约系统 Kid,可执行一些有趣的程序正确性证明任务
>> # 介绍我的一个用 Perl 实现的从 Intel 手册到一个全功能的 x86 反汇编器的自动转换器(或者说写程序的程序)(Salent 项目中的
>> IDU 子项目)
>> # 介绍如何用 Perl 实现来完成各种有趣的组合构造问题(组合数学和数理统计啦,啦啦啦)
>> # 介绍如何将 Perl 项目比较平滑地转换为 ANSI C++ 代码(with STL)
>> # OpenResty 经验谈:DBD::Pg 不是好的 PostgreSQL 的 Perl 客户端绑定的几大理由
>> # 回顾:我是如何"打进"国际 Perl 社区的
>>
>> 先想到这些,一定还有很多其他好玩的值得分享,以后再补上吧,呵呵
>>
>> Cheers,
>> -agentzh
>>
>>
>>
>
> >
>


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

你試試把下面的存為 utf8文件執行一下:

#!/usr/bin/perl
use Encode;
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$string=encode('gbk',$string);
$decoder = guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

On 3月19日, 下午9时24分, Okàjn <okajn...@gmail.com> wrote:
> use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> 改为
> use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;
>
> 运行结果:
>
> Wide character in print at ./test.pl line 7.
> 出征进行曲
>
> 2009/3/19 Calvin <calvin.n...@gmail.com>
>
> > 按照網上搜索到的 Encode:;Guess 的資料,寫了個 test.pl,內容:
>
> > #!/usr/bin/perl
>
> > use Encode;
> > use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
> > $string="出征进行曲";
> > $decoder = guess_encoding($string);
> > $info=$decoder->decode($string);
> > print "$info\n";
>
> > 這個 test.pl 保存成 utf8 txt檔案,執行,出錯:
>
> > Can't locate object method "decode" via package "utf-8-strict or
> > utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
> > test.pl line 6.
>
> > 按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
改为
use Encode::Guess qw/utf8 euc-cn gbk utf-16le/;

运行结果:

Wide character in print at ./test.pl line 7.
出征进行曲



2009/3/19 Calvin <calvin.ngei@gmail.com>
按照網上搜索到的 Encode:;Guess 的資料,寫了個 test.pl,內容:

#!/usr/bin/perl

use Encode;
use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$decoder = guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

這個 test.pl 保存成 utf8 txt檔案,執行,出錯:

Can't locate object method "decode" via package "utf-8-strict or
utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
test.pl line 6.

按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?



--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 使用 Encode::Guess 遇到的��

如果已经是 utf8,那么还有什么必要去 encode 呢?
应该是对其他码制做这个测试才对,如果 !ref $enc 就不必转换了。

2009/3/19 Calvin <calvin.ngei@gmail.com>
按照網上搜索到的 Encode:;Guess 的資料,寫了個 test.pl,內容:

#!/usr/bin/perl

use Encode;
use Encode::Guess qw/utf-8 euc-cn gbk utf-16le/;
$string="出征进行曲";
$decoder = guess_encoding($string);
$info=$decoder->decode($string);
print "$info\n";

這個 test.pl 保存成 utf8 txt檔案,執行,出錯:

Can't locate object method "decode" via package "utf-8-strict or
utf8" (perhaps you forgot to load "utf-8-strict or utf8"?) at ./
test.pl line 6.

按照網上的例子和官方說明,Encode::Guess是這樣用的沒錯啊,怎麼回事呢?



--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---