UTF8 フラグが設定されているが、無効な UTF8 バイト シーケンスを含む perl 文字列を作成する良い方法は何ですか?
ネイティブ エンコーディングから UTF-X への変換を実行せずに、Perl 文字列に UTF8 フラグを設定する方法はありますか (たとえば、 を呼び出したときに発生しますutf8::upgrade
)。
DBI ドライバーの潜在的なバグを追跡するために、これを行う必要があります。
それがまさに Encode の_utf8_on
機能です。
use Encode qw( _utf8_on );
my $s = "abc\xC0def"; # String to use as raw buffer content.
utf8::downgrade($s); # Make sure each char is stored as a byte.
_utf8_on($s); # Set UTF8 flag.
(_utf8_on
悪いスカラーを生成したい場合以外は使用しないでください。)
を使用して損傷を表示できます
use Devel::Peek qw( Dump );
Dump($s);
出力:
SV = PV(0x24899c) at 0x4a9294
REFCNT = 1
FLAGS = (PADMY,POK,pPOK,UTF8)
PV = 0x24ab04 "abc\300def"\0Malformed UTF-8 character (unexpected non-continuation byte 0x64, immediately after start byte 0xc0) in subroutine entry at script.pl line 9.
[UTF8 "abc\x{0}ef"]
CUR = 7
LEN = 12