我正在对伯克利数据库进行实验。我只是从 DB a 中删除内容并将键值对重新插入 DB b。但是,在将键值对插入此 DB b 时,出现宽字符错误。帮助?
问问题
156 次
1 回答
6
BerkeleyDB 存储字节(“八位字节”)。Perl 字符串由 Perl 字符组成。为了将 Perl 字符存储在基于八位字节的存储中,您必须将字符转换为字节。这被称为编码,就像在字符编码中一样。
您收到的警告表明 Perl 正在为您进行转换,并且正在猜测您要使用的字符编码。由于它可能会猜错,所以最好明确地说出来。Encode 模块允许您这样做。
而不是写:
$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。每当您通过网络、文件、终端或几乎任何东西进行通信时,您必须确保在输出时将字符编码为八位字节,并在输入时将八位字节解码为字符。否则,您的程序将不会工作。
于 2010-05-14T01:14:07.760 回答