— |
#! /bin/false
my @to_ucs4 = (
0x0000,
0x0001,
0x0002,
0x0003,
0x0004,
0x0005,
0x0006,
0x0007,
0x0008,
0x0009,
0x000a,
0x000b,
0x000c,
0x000d,
0x000e,
0x000f,
0x0010,
0x0011,
0x0012,
0x0013,
0x0014,
0x0015,
0x0016,
0x0017,
0x0018,
0x0019,
0x001a,
0x001b,
0x001c,
0x001d,
0x001e,
0x001f,
0x0020,
0xfffd,
0xfffd,
0xfffd,
0x0024,
0x0025,
0xfffd,
0x0027,
0x0028,
0x0029,
0x002a,
0x002b,
0x002c,
0x002d,
0x002e,
0x002f,
0x0030,
0x0031,
0x0032,
0x0033,
0x0034,
0x0035,
0x0036,
0x0037,
0x0038,
0x0039,
0x003a,
0x003b,
0x003c,
0x003d,
0x003e,
0xfffd,
0xfffd,
0x0041,
0x0042,
0x0043,
0x0044,
0x0045,
0x0046,
0x0047,
0x0048,
0x0049,
0x004a,
0x004b,
0x004c,
0x004d,
0x004e,
0x004f,
0x0050,
0x0051,
0x0052,
0x0053,
0x0054,
0x0055,
0x0056,
0x0057,
0x0058,
0x0059,
0x005a,
0x005b,
0xfffd,
0x005d,
0xfffd,
0xfffd,
0xfffd,
0x0061,
0x0062,
0x0063,
0x0064,
0x0065,
0x0066,
0x0067,
0x0068,
0x0069,
0x006a,
0x006b,
0x006c,
0x006d,
0x006e,
0x006f,
0x0070,
0x0071,
0x0072,
0x0073,
0x0074,
0x0075,
0x0076,
0x0077,
0x0078,
0x0079,
0x007a,
0xfffd,
0x007c,
0xfffd,
0xfffd,
0x007f,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
0xfffd,
);
my @to_utf8 = (
"\x00" ,
"\x01" ,
"\x02" ,
"\x03" ,
"\x04" ,
"\x05" ,
"\x06" ,
"\x07" ,
"\x08" ,
"\x09" ,
"\x0a" ,
"\x0b" ,
"\x0c" ,
"\x0d" ,
"\x0e" ,
"\x0f" ,
"\x10" ,
"\x11" ,
"\x12" ,
"\x13" ,
"\x14" ,
"\x15" ,
"\x16" ,
"\x17" ,
"\x18" ,
"\x19" ,
"\x1a" ,
"\x1b" ,
"\x1c" ,
"\x1d" ,
"\x1e" ,
"\x1f" ,
"\x20" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\x24" ,
"\x25" ,
"\xef\xbf\xbd" ,
"\x27" ,
"\x28" ,
"\x29" ,
"\x2a" ,
"\x2b" ,
"\x2c" ,
"\x2d" ,
"\x2e" ,
"\x2f" ,
"\x30" ,
"\x31" ,
"\x32" ,
"\x33" ,
"\x34" ,
"\x35" ,
"\x36" ,
"\x37" ,
"\x38" ,
"\x39" ,
"\x3a" ,
"\x3b" ,
"\x3c" ,
"\x3d" ,
"\x3e" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\x41" ,
"\x42" ,
"\x43" ,
"\x44" ,
"\x45" ,
"\x46" ,
"\x47" ,
"\x48" ,
"\x49" ,
"\x4a" ,
"\x4b" ,
"\x4c" ,
"\x4d" ,
"\x4e" ,
"\x4f" ,
"\x50" ,
"\x51" ,
"\x52" ,
"\x53" ,
"\x54" ,
"\x55" ,
"\x56" ,
"\x57" ,
"\x58" ,
"\x59" ,
"\x5a" ,
"\x5b" ,
"\xef\xbf\xbd" ,
"\x5d" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\x61" ,
"\x62" ,
"\x63" ,
"\x64" ,
"\x65" ,
"\x66" ,
"\x67" ,
"\x68" ,
"\x69" ,
"\x6a" ,
"\x6b" ,
"\x6c" ,
"\x6d" ,
"\x6e" ,
"\x6f" ,
"\x70" ,
"\x71" ,
"\x72" ,
"\x73" ,
"\x74" ,
"\x75" ,
"\x76" ,
"\x77" ,
"\x78" ,
"\x79" ,
"\x7a" ,
"\xef\xbf\xbd" ,
"\x7c" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\x7f" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
"\xef\xbf\xbd" ,
);
my %from_ucs4 = (
0x00000000 => "\x00" ,
0x00000001 => "\x01" ,
0x00000002 => "\x02" ,
0x00000003 => "\x03" ,
0x00000004 => "\x04" ,
0x00000005 => "\x05" ,
0x00000006 => "\x06" ,
0x00000007 => "\x07" ,
0x00000008 => "\x08" ,
0x00000009 => "\x09" ,
0x0000000a => "\x0a" ,
0x0000000b => "\x0b" ,
0x0000000c => "\x0c" ,
0x0000000d => "\x0d" ,
0x0000000e => "\x0e" ,
0x0000000f => "\x0f" ,
0x00000010 => "\x10" ,
0x00000011 => "\x11" ,
0x00000012 => "\x12" ,
0x00000013 => "\x13" ,
0x00000014 => "\x14" ,
0x00000015 => "\x15" ,
0x00000016 => "\x16" ,
0x00000017 => "\x17" ,
0x00000018 => "\x18" ,
0x00000019 => "\x19" ,
0x0000001a => "\x1a" ,
0x0000001b => "\x1b" ,
0x0000001c => "\x1c" ,
0x0000001d => "\x1d" ,
0x0000001e => "\x1e" ,
0x0000001f => "\x1f" ,
0x00000020 => "\x20" ,
0x00000024 => "\x24" ,
0x00000025 => "\x25" ,
0x00000027 => "\x27" ,
0x00000028 => "\x28" ,
0x00000029 => "\x29" ,
0x0000002a => "\x2a" ,
0x0000002b => "\x2b" ,
0x0000002c => "\x2c" ,
0x0000002d => "\x2d" ,
0x0000002e => "\x2e" ,
0x0000002f => "\x2f" ,
0x00000030 => "\x30" ,
0x00000031 => "\x31" ,
0x00000032 => "\x32" ,
0x00000033 => "\x33" ,
0x00000034 => "\x34" ,
0x00000035 => "\x35" ,
0x00000036 => "\x36" ,
0x00000037 => "\x37" ,
0x00000038 => "\x38" ,
0x00000039 => "\x39" ,
0x0000003a => "\x3a" ,
0x0000003b => "\x3b" ,
0x0000003c => "\x3c" ,
0x0000003d => "\x3d" ,
0x0000003e => "\x3e" ,
0x00000041 => "\x41" ,
0x00000042 => "\x42" ,
0x00000043 => "\x43" ,
0x00000044 => "\x44" ,
0x00000045 => "\x45" ,
0x00000046 => "\x46" ,
0x00000047 => "\x47" ,
0x00000048 => "\x48" ,
0x00000049 => "\x49" ,
0x0000004a => "\x4a" ,
0x0000004b => "\x4b" ,
0x0000004c => "\x4c" ,
0x0000004d => "\x4d" ,
0x0000004e => "\x4e" ,
0x0000004f => "\x4f" ,
0x00000050 => "\x50" ,
0x00000051 => "\x51" ,
0x00000052 => "\x52" ,
0x00000053 => "\x53" ,
0x00000054 => "\x54" ,
0x00000055 => "\x55" ,
0x00000056 => "\x56" ,
0x00000057 => "\x57" ,
0x00000058 => "\x58" ,
0x00000059 => "\x59" ,
0x0000005a => "\x5a" ,
0x0000005b => "\x5b" ,
0x0000005d => "\x5d" ,
0x00000061 => "\x61" ,
0x00000062 => "\x62" ,
0x00000063 => "\x63" ,
0x00000064 => "\x64" ,
0x00000065 => "\x65" ,
0x00000066 => "\x66" ,
0x00000067 => "\x67" ,
0x00000068 => "\x68" ,
0x00000069 => "\x69" ,
0x0000006a => "\x6a" ,
0x0000006b => "\x6b" ,
0x0000006c => "\x6c" ,
0x0000006d => "\x6d" ,
0x0000006e => "\x6e" ,
0x0000006f => "\x6f" ,
0x00000070 => "\x70" ,
0x00000071 => "\x71" ,
0x00000072 => "\x72" ,
0x00000073 => "\x73" ,
0x00000074 => "\x74" ,
0x00000075 => "\x75" ,
0x00000076 => "\x76" ,
0x00000077 => "\x77" ,
0x00000078 => "\x78" ,
0x00000079 => "\x79" ,
0x0000007a => "\x7a" ,
0x0000007c => "\x7c" ,
0x0000007f => "\x7f" ,
);
sub _recode
{
if ( $_ [0]->{_from} eq 'INTERNAL' ) {
$_ [1] = join '' ,
map $from_ucs4 { $_ }
|| ( defined $from_ucs4 { $_ } ? $from_ucs4 { $_ } : "\x3f" ),
@{ $_ [1]};
} elsif ( $_ [0]->{_to} eq 'UTF-8' ,) {
$_ [1] = join '' , map $to_utf8 [ $_ ], unpack 'C*' , $_ [1];
} else {
$_ [1] = [ map
$to_ucs4 [ $_ ],
unpack 'C*' , $_ [1]
];
}
return 1;
}
1;
|