Encode::decode_utf8()ã§ãã£ã¦ãis_utf8()ã使ãã¹ãçç±
404 Blog Not Found:#perl - utf8::decode()ではなくEncode::decode_utf8()を使うべき理由
Validationã®è¦³ç¹ã ãã§ã¯ãªããç°¡æ½æ§ã®è¦³ç¹ããããEncode::decode_utf8()ã¯ããããã§ãããã§ã« UTF-8 flag ãã¤ããæååã¯ãã®ã¾ã¾ã³ãã¼ããã ããªã®ã§ãæ¡ä»¶åå²ãä¸è¦ã§ãã
ããã¯å³å¯ã«ã¯ãããªãã
Validationã®è¦³ç¹ã ãã§ã¯ãªããç°¡æ½æ§ã®è¦³ç¹ããããEncode::decode_utf8()ã¯ããããã§ãããã§ã« UTF-8 flag ãã¤ããæååã¯Encode-2.13以éã§ããã°ãã®ã¾ã¾ã³ãã¼ããã ããªã®ã§ãæ¡ä»¶åå²ãä¸è¦ã§ãã
Encode-2.12ã§ã¯ãã®ã¾ã¾ã³ãã¼ãã¦ãªãããã®ã¾ã¾ã³ãã¼ããã®ã¯2.13以éã§ã®å®è£ ã
--- Encode-2.12/Encode.pm 2005-09-08 23:17:34.000000000 +0900 +++ Encode-2.13/Encode.pm 2006-01-16 00:06:45.000000000 +0900 @@ -200,6 +199,7 @@ sub decode_utf8($;$) { my ($str, $check) = @_; + return $str if is_utf8($str); if ($check){ return decode("utf8", $str, $check); }else{
ãã£ã¦ãEncode-2.12ç°å¢ã ã¨ã
#!/usr/bin/perl use strict; use warnings; use Encode; use Devel::Peek; { use utf8; my $bytes = 'æ¾éµ'; Dump($bytes); my $utf8 = decode_utf8($bytes); Dump($utf8); }
ããã¯ã¨ã©ã¼ã«ãªãã
SV = PV(0x7120f0) at 0x72ba70 REFCNT = 1 FLAGS = (PADBUSY,PADMY,POK,pPOK,UTF8) PV = 0x721460 "\346\235\276\351\265\234"\0 [UTF8 "\x{677e}\x{9d5c}"] CUR = 6 LEN = 8 Cannot decode string with wide characters at /usr/lib64/perl5/5.8.8/x86_64-linux/Encode.pm line 166.
ãã£ã¦ãä¾ãã°ããããã®ãç¡é£ã
#!/usr/bin/perl use strict; use warnings; use Encode; use Devel::Peek; { use utf8; my $bytes = 'æ¾éµ'; Dump($bytes); my $utf8 = Encode::is_utf8($bytes) ? $bytes : decode_utf8($bytes); Dump($utf8); }
utf8:is_utf8()ã§ã¯ãªãEncode::is_utf8()ã使ãã®ãå¤åã¹ãã¼ãã
ãªãã§ã¾ã Encode-2.12ã使ã£ã¦ããã ï¼
ã¨æããããã ããéçºã®ç¾å ´ã§ã¯Encode-2.12ã使ã£ã¦ãå¯è½æ§ãé«ããçç±ã¯æ¬¡ã®ã¨ããã
ã ã£ãããã¼ã¸ã§ã³ãä¸ããã°ãããããªã
ãããããä¸ããããªãç°å¢ã£ã¦ã®ãããã¾ãã¦ã
- ãã¼ã¸ã§ã³ãä¸ããæ¨©éããªã
- åæã«Perlã¢ã¸ã¥ã¼ã«ãã¤ã³ã¹ãã¼ã«ããã¨ãµãã¼ã対象å¤
- perlã®RPMããã±ã¼ã¸ã§æä¾ãããEncodeã¨ã®æ´åæ§ã§äºã *1
- pure perlãªã¢ã¸ã¥ã¼ã«ããã¤ã³ã¹ãã¼ã«ã§ããªã*2
- ã§ãæ§è½å£åã¯é¿ããã
ã¨ãã¨ããããããã¼ããï¼ãªãï¼ä¿ºã ãï¼
åOSã§æä¾ããã¦ããPerlã®ãã¼ã¸ã§ã³
ã¤ãã§ãªã®ã§ãä»ã®OSããã£ã¨èª¿ã¹ã¦ã¿ãã
OSå | Perlã®ãã¼ã¸ã§ã³ | åè |
---|---|---|
Debian stable(lenny) | 5.10.0 | oldstable(etch)ã¯5.8.8 |
Fedora 11 | 5.10.0 | Fedora 8ã¯5.8.8 |
Gentoo | 5.8.8 | stableãunstableã5.8.8 |
openSUSE stable(11.1) | 5.10.0 | 10.3ã¯5.8.8 |
RHEL5 | 5.8.8 | CentOS5ãåæ§ |
Ubuntu 9.04 | 5.10.0 | 8.04ã¯5.8.8 |
Vine Linux 5 | 5.10.0 | Vine-4.2ã¯5.8.6 |
FreeBSD 7.2 | 5.10.0 | 7.1ã¯5.8.8 |
Mac OS X(Snow Leopard) | 5.10.0 | Leopardã¯5.8.8 |
RHEL5ã¨Gentoo以å¤ã¯5.10.0ã ããä»ãã¤ãæè¿ã¾ã§5.8.8ã ã£ããæ®å¿µãªããEncode-2.12ã¯ã¾ã ã¾ã ç¾å½¹ã
Gentooããã¾ã ã«5.8.8ãªã®ã¯ãSpamAssassinãªã©5.10.0ã¨çµã¿åãããã¨è¡åãæªãã¯ã½ã¢ã¸ã¥ã¼ã«ãããããã®ããã§ãããã¼å¤§å¤ã§ããªãã
*1:å®éã¯è¢«ããªãã®ã ã
*2:ã¬ã³ã¿ã«ãµã¼ãç°å¢ãªã©