0
我正在伯克利数据库上运行实验。我只是从DB a中删除内容并将键值对重新插入到DB b中。但是,在将键值对插入此DB时,我遇到宽字符错误。帮帮我?当我插入Berkeley DB时,为什么会从Perl中收到宽字符警告?
我正在伯克利数据库上运行实验。我只是从DB a中删除内容并将键值对重新插入到DB b中。但是,在将键值对插入此DB时,我遇到宽字符错误。帮帮我?当我插入Berkeley DB时,为什么会从Perl中收到宽字符警告?
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更真实;无论何时通过网络,文件,终端或任何东西进行通信,您都必须确保在出路时将字符编码为八位字节,并将八位字节解码为字符。否则,您的程序将不会工作。
提供一些代码和例外 – 2010-05-13 22:37:53