2012年 7月 27

Digest::SHA1でsha1ハッシュ値を作成する時に日本語(内部文字列 utf8フラグ有り)を含むとWide character in subroutine…とエラーになってしまう。

use utf8;
use Digest::SHA1 qw/sha1_hex/;
print sha1_hex("あいう"), "\n";
# エラー

Encodeすれば大丈夫だけど、Mojolicious使いとしてはMojo::ByteStreamを使おうと思う。

use utf8;
use Mojo::ByteStream 'b';
print b("あいう")->sha1_sum->to_string,  "\n";

utf8フラグが立っていても大丈夫。
実行結果も同じ。

use utf8;
use Mojo::ByteStream 'b';
use Digest::SHA1 qw/sha1_hex/;
use Encode;
print sha1_hex(encode('utf8',"あいう")), "\n";
print b("あいう")->sha1_sum->to_string, "\n";

# 結果
eb636ba7c320e00b3749ad404b7adc7609560dee
eb636ba7c320e00b3749ad404b7adc7609560dee

Filed under: perl

Trackback Uri