2006ǯ11·î19Æü 22:30 [Edit]

perl - Encode::Alias does not realias canonicals

camel

Á´¹ñ¤ÎPerl Monger¤Î¤ß¤Ê¤µ¤ó¤³¤ó¤Ð¤ó¤ï¡£Encode Maintainer¤ÎÃÆ¤Ç¤´¤¶¤¤¤Þ¤¹¡£

Èó¾ï¤Ëµ©¤Ê¤¬¤é¡¢ÃΤäƤ¤¤Ê¤¤¤Èbug¤È´ª°ã¤¤¤¹¤ëfeature (¾¯¤Ê¤¯¤È¤â undocument ¤À¤Ã¤¿!) ¤¬¤¢¤Ã¤¿¤Î¤Ç¤ªÃΤ餻¤·¤Þ¤¹¡£


°Ê²¼¤Îtest script¤ò¤´Í÷²¼¤µ¤¤¡£

use strict;
use warnings;
use Encode;
use Encode::Alias;
use Test::More tests => 3;
define_alias( qr/sjis$/i => '"cp932"' ); # Look here!
my $char = "\x{FF5E}";
my $bytes = encode("cp932", $char);
is $bytes, "\x81\x60";
is $char,  decode("sjis", $bytes);
is $bytes, encode("sjis", $char);
__END__

¸«¤Æ¤Î¤È¤ª¤ê¡¢²¿¤ÎÌäÂê¤â¤Ê¤¯Æ°¤­¤Þ¤¹¡£

% perl alias.t
1..3
ok 1
ok 2
ok 3

¤³¤³¤Ç¡¢define_alias( qr/sjis$/i => '"cp932"' )¤ò¡¢define_alias( qr/shiftjis$/i => '"cp932"' )¤È½ñ¤­´¹¤¨¤Æ¤Æ¤ß¤Þ¤¹¡£¤¹¤ë¤È¤¢¤éÉԻ׵ġ¢ÅÓü¤Ëư¤«¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£

% perl alias_nok.t 
1..3
ok 1
not ok 2
#   Failed test in alias_nok.t at line 10.
Wide character in print at /usr/local/lib/perl5/5.8.8/Test/Builder.pm line 1199.
#          got: '¡Á'
#     expected: '¡Á'
not ok 3
#   Failed test in alias_nok.t at line 11.
#          got: '?`'
#     expected: '?'
# Looks like you failed 2 tests of 3.

¤³¤ì¤Ï¥Ð¥°¤Ç¤·¤ç¤¦¤«¡©¤¤¤¨¡¢¼Â¤Ï»ÅÍͤʤΤǤ¹¡£

shiftjis¤È¤¤¤¦¤Î¤Ï¡¢alias¤Ç¤Ï¤Ê¤¯canonical name (Encode.pm¤Ë¤ª¤±¤ëÀµ¼°Ì¾¾Î)¤Ç¡¢Encode::Alias¤Ïcanonical¤ÎÃÖ¤­´¹¤¨¤Ï¤Ç¤­¤Þ¤»¤ó¡£Encode¤Î¥½¡¼¥¹¤ò¤è¤¯ÆÉ¤á¤Ð¡¢canonical¤ÎÃÖ¤­´¹¤¨¤ÎÊýË¡¤â¤¹¤°¤Ë»×¤¤¤Ä¤¯¤³¤È¤Ç¤·¤ç¤¦¤¬¡¢¤³¤ì¤Ï¤ä¤Ï¤êÈò¤±¤¿Êý¤¬¤¤¤¤¤Ç¤·¤ç¤¦¡£

º£²ó¤Î undocumented feature ¤Ëµ¤¤Å¤«¤»¤Æ¤¯¤ì¤¿miyagawa++·¯¡¢¤¢¤ê¤¬¤È¤¦!

Dan the Encode Maintaner


¤³¤Îµ­»ö¤Ø¤Î¥È¥é¥Ã¥¯¥Ð¥Ã¥¯URL

¤³¤Îµ­»ö¤Ø¤Î¥³¥á¥ó¥È
binmode STDOUT,':encoding(shift_jis);
binmode STDOUT,':encoding(shift_jis);
¤È£²²ó»ØÄꤹ¤ë¤Èʸ»ú²½¤±¤¹¤ë¤Î¤Ï»ÅÍͤǤ·¤ç¤¦¤«¡£

¥â¥¸¥å¡¼¥ëÆâ¤È¥á¥¤¥ó¤ÎplÆâ¤ÎξÊý¤ÇÀßÄꤷ¤Æ¤·¤Þ¤¤¡¢·ë¹½È¯¸«¤¹¤ë¤Î¤Ë»þ´Ö¤«¤«¤Ã¤Á¤ã¤¤¤Þ¤·¤¿¡£
Posted by perl»Ï¤á¤Þ¤·¤¿¡£ at 2006ǯ11·î20Æü 11:39
perl»Ï¤á¤Þ¤·¤¿¡£¤µ¤ó¡¢
¤½¤¦¤Ç¤¹¡¢PerlIO¤Î»ÅÍͤǤ¹¡£
¤³¤ì¤Ë¤Ï°ì±þ²óÈòºö
(¤È¤¤¤¦¤Î¤«¤½¤â¤½¤âbinmode¤òΩ¤ÆÂ³¤±¤ËÀßÄꤹ¤ë¥±¡¼¥¹¤¬»×¤¤¤Ä¤­¤Ë¤¯¤¤)
¤¬¤´¤¶¤¤¤Þ¤·¤Æ¡¢
binmode STDOUT,':raw:encoding(shift_jis);'
¤È':raw'¤ò¤½¤ÎÁ°¤Ë»ØÄꤹ¤ë¤Î¤Ç¤¹¡£
¤³¤ì¤Ï¤½¤ÎÁ°¤Ë»ØÄꤷ¤¿PerlIO Layer¤ò¥¯¥ê¥¢¤¹¤ë¤È¤¤¤¦°ÕÌ£¤Ë¤â¤Ê¤ë¤Î¤Ç¡£
Dan the Perl 5 Porter
Posted by ÃÆ at 2006ǯ11·î20Æü 12:16
Áᮤª¤·¤¨¤Æ¤¤¤¿¤À¤­¡¢¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤·¤¿¡£

¥â¥¸¥å¡¼¥ë¦¤Ë¤½¤â¤½¤âbinmodeÀßÄꤹ¤ë¤Î¤¬¤ª¤«¤·¤¤¤ó¤Ç¤¹¤Í¤­¤Ã¤È¡£

¸Æ¤Ó½Ð¤·Â¦¥á¥¤¥ó¥¹¥¯¥ê¥×¥È¤Î¤Û¤¦¤ÇÀßÄꤷ¤Æ¥â¥¸¥å¡¼¥ë¦¤Ï¤½¤ÎÀßÄê¤ò¤½¤Î¤Þ¤ÞÍøÍѤ¹¤ë¤Ù¤­¤À¤È¤¤¤¦¤³¤È¤Ë¡¢¤³¤Î¥È¥é¥Ö¥ë¤Î¤¢¤Èµ¤¤Å¤¤¤¿¼¡Âè¤Ç¤¹¡£

¤³¤ì¤«¤é¤â¤¿¤á¤Ë¤Ê¤ëµ­»ö´üÂÔ¤·¤Æ¤Þ¤¹¡£
Posted by perl»Ï¤á¤Þ¤·¤¿ at 2006ǯ11·î20Æü 18:21
¤Ê¤ë¤Û¤É¡£ÀâÌÀ¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£

¤Ç¡¢º£¤ÏUTF-8¢ªISO-2022-JP¤Ø¤ÎÊÑ´¹½èÍý¤Ç¡¢
³°»ú¡Ê­¡­¢¤È¤«¡Ë¤âÂбþ¤·¤¿¤¤¤È»×¤¤¤Þ¤¹¤¬¡¢
°Ê²¼¤Î¤è¤¦¤Ê½èÍý¤Ï£Î£Ç¤Ç¤·¤¿¡£

Encode::from_to($str, "utf-8", "7bit-jis");

Ä´¤Ù¤Æ¤ß¤¿¤é Encode::JP::JIS7¤ÎÃæ¤Ç°ìöutf-8¢ªeuc-jp¤Ë¤·¤Æ¡¢
euc-jp¢ª7bit-jis¤ËÊÑ´¹¤·¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¡£
euc-jp¤Ï³°»úÂбþ¤·¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢
¤³¤ì¤ò³°»úÂбþ¤Îeuc-jp-ms¤Ë¤·¤¿¤¤¤Ç¤¹¤¬¡¢
¤´ÀâÌÀ¤Î¤è¤¦¤Ë¡¢°Ê²¼¤ÎÊýË¡¤â¥À¥á¡£
define_alias('euc-jp' => 'euc-jp-ms')

¾åµ­¤Î½èÍý¤ò¼Â¸½¤¹¤ë¤¿¤á¤Ë¡¢¤É¤ó¤ÊÊýË¡¤Ç¤ä¤ì¤Ð¤¤¤¤¤Ç¤·¤ç¤¦¤«¡©


Posted by charlee at 2008ǯ03·î26Æü 20:40