0

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

4

1 に答える 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 に答える