为什么我在Berkeley DB中插入时会收到来自Perl的宽字符警告?

为什么我在Berkeley DB中插入时会收到来自Perl的宽字符警告?,perl,berkeley-db,Perl,Berkeley Db,我在伯克利星展银行做实验。我只是从DB a中删除内容,然后将键值对重新插入DB b。但是,在将键值对插入到这个DB中时,我会遇到大量字符错误。帮助?BerkeleyDB存储字节(“八位字节”)。Perl字符串由Perl字符组成。为了在基于八位字节的存储中存储Perl字符,必须将字符转换为字节。这称为编码,如字符编码 您得到的警告表明Perl正在为您进行转换,并且正在猜测您想要使用什么字符编码。因为它可能猜错了,所以最好明确地说。编码模块允许您这样做 而不是写: $db->store( ke

我在伯克利星展银行做实验。我只是从DB a中删除内容,然后将键值对重新插入DB b。但是,在将键值对插入到这个DB中时,我会遇到大量字符错误。帮助?

BerkeleyDB存储字节(“八位字节”)。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;无论何时,当您通过网络、文件、终端或几乎任何东西进行通信时,您必须确保在输出时将字符编码为八位字节,在输入时将八位字节解码为字符。否则,您的程序将无法运行。

BerkeleyDB存储字节(“八位字节”)。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;无论何时,当您通过网络、文件、终端或几乎任何东西进行通信时,您必须确保在输出时将字符编码为八位字节,在输入时将八位字节解码为字符。否则,您的程序将无法运行。

提供一些代码和异常提供一些代码和异常