[Perl]如何得知输入的字串是否为 UTF-8 编码

使用下列函数,如果传回值为 1,表示输入的字串为 UTF-8 编码:

#Returns 1 if $text is valid UTF-8 and 0 otherwise.
sub is_utf8 {
    my $text = shift;
    if( $text =~ m/^(
        [\x09\x0A\x0D\x20-\x7E]             # ASCII
        | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
        | \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
        | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
        | \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
        | \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
        | [\xF1-\xF3][\x80-\xBF]{3}         # planes 4-15
        | \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
    )*$/x ){
        return 1;
    }
    else{
        return 0;
    }
} #sub is_utf8

参考网页

  1. No comments yet.

  1. No trackbacks yet.

return top

%d 位部落客按了赞: