2

このスニペットが次のエラーで失敗する理由を誰か教えてもらえますか? utf8::downgrade()電話をかける前にも試し from_to()ましたが、成功しませんでした。Perl 5.14.2 を使用。

何か案は??

コード:

use Encode qw(from_to);
use HTML::Entities;

$s = "มหั&#3624";
$foo = decode_entities($s);
print "is foo UTF8? ", utf8::is_utf8($foo), "\n";
from_to($foo, 'UTF-8', 'UTF-16');

出力:

is foo UTF8? 1
Cannot decode string with wide characters at /usr/lib/perl/5.14/Encode.pm line 194.
4

1 に答える 1

5

まず第一に、utf8::is_utf8あなたが思っていることをしません。文字列の内部ストレージに関する詳細を提供します。チェックする必要はありません

問題は、文字列が UTF-8 を使用してエンコードされていないことです。まったく暗号化されていません。decode_entitiesどちらも、デコードされた文字列 (Unicode コード ポイントの文字列) を受け取り、返します。

あなたが使用することができます

encode('UTF-16', decode_entities(decode('UTF-8', $foo)))
于 2013-04-05T17:14:19.797 に答える