2010-05-13 63 views

回答

6

BerkeleyDB存储字节(“octets”)。 Perl字符串由Perl字符组成。为了在基于八位字节的存储中存储Perl字符,必须将字符转换为字节。这就是所谓的编码,就像字符编码一样。

您收到的警告表示Perl正在为您进行转换,并猜测您要使用的是什么字符编码。由于它可能会猜错,最好明确地说。编码模块可以让你做到这一点。

而是写的:

$db->store(key => $value); 

而应该写:

use Encode qw(encode); 

$db->store(key => encode('utf-8', $value)); 

而且对出路:

use Encode qw(decode); 

$db->get($key, $octets); # BDB returns the result via the arg list. C programmers... 
my $value = decode('utf-8', $octets); 

这是不仅仅是BDB更真实;无论何时通过网络,文件,终端或任何东西进行通信,您都必须确保在出路时将字符编码为八位字节,并将八位字节解码为字符。否则,您的程序将不会工作。

相关问题