Berkeley DB で実験を行っています。DB a からコンテンツを削除し、キーと値のペアを DB b に再挿入するだけです。ただし、この DB b にキーと値のペアを挿入すると、ワイド文字エラーが発生します。ヘルプ?
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 に答える