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