|
kabe さん、こん**は。Hidemi Oya です。
> D6 と D7 の仕様の違いだとすれば、怪しいのは
> p := PChar(t);
>の部分(D3 でも大丈夫だったような気はするけど…)ですかねえ?
EncodeHex で
P := PChar(Utf8ToAnsi(t));
が OK ですから、こいつは問題ないですね。
で、ソースを見直してみたら、フィールド名の書き戻しができないことが判明しました(^_^;)。エラーメッセージのデコードは問題ないはずです。DecodeHex の end; から上に5行目の
// Result := ReplaceRegExpr('hex' + t + '([^0-9a-f])', Result, AnsiToUtf8(s) + '$1', true);
Result := ReplaceRegExpr('hex' + t + '([^0-9a-f])', Result, s + '$1', true);
を
// Result := ReplaceRegExpr('hex' + t + '([^0-9a-f]|$)', Result, AnsiToUtf8(s) + '$1', true);
Result := ReplaceRegExpr('hex' + t + '([^0-9a-f]|$)', Result, s + '$1', true);
に書き換えてください。
SQLite3 の基本エンコードは Unicode のようなので、データベースの内容も SQL のやりとりも全て UTF-16 にしてやれば、問題なく日本語が通るのかもしれません。SQLite 3.3.6 の DLL が日本語データベース名を通してくれないのも、Unicode でなく ShiftJIS だからかも…。
UTF-8 のフィールド名が正常に使えないのは、UTF-8 を無理矢理 UTF-16 に変換しているせいだと考えれば、理解できるような気がします。
|
|