2008/11/27 silent &lt;<a href="mailto:silent2600@gmail.com">silent2600@gmail.com</a>&gt;<br>&gt;<br>&gt; 看了cu上的帖子:<br>&gt; <a href="http://bbs.chinaunix.net/viewthread.php?tid=907172">http://bbs.chinaunix.net/viewthread.php?tid=907172</a><br>
&gt;<br><br>我们一般使用 CPAN 上的 Encode::Guess 模块。对于长文本非常有效的,但是对于非常短的,比如两三个字的文本就不怎么准了,呵呵。<br><br> &nbsp; &nbsp; &nbsp; &nbsp;use Encode::Guess;<br> &nbsp; &nbsp; &nbsp; &nbsp;my @enc = qw( UTF-8 GB2312 Big5 GBK Latin1 );<br> &nbsp; &nbsp; &nbsp; &nbsp;for my $enc (@enc) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;my $decoder = guess_encoding($data, $enc);<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (ref $decoder) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$charset = $decoder-&gt;name;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;last;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp; &nbsp;if (!$charset) {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;die &quot;Can&#39;t determine the charset of the input.\n&quot;;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;}<br><br>这里 @enc 中是尝试的 charset 数量。其实感觉用 Encode 的 decode 函数也可以直接整,只不过设一个参数让它遇到错误字节时直接抛异常即可 ;)<br><br>-agentzh