gpt4 book ai didi

Delphi XE、Firebird 和 UTF8

转载 作者:行者123 更新时间:2023-12-03 15:57:08 25 4
gpt4 key购买 nike

我正在将 D7 程序升级到 XE,在 Delphi 7 下我有这样的代码......

ParamByName('Somefield').AsString:=someutf8rawbytestring;

在 XE 下,如果某个 utf8rawbytestring 包含 unicode 字符(例如西里尔字母),那么它们将显示为 ????在数据库中。

我看到 someutf8rawbytestring 的长度是 8 个字符,对于我的 4 个字符的字符串来说,这是正确的。但在数据库中只有四个字符。

我通过 XE 的 TIBQuery 使用 Firebird 2,并更新字符类型“NONE”的 Varchar 字段。

所以看起来是 utf8 被检测到并以某种方式转换回 unicode 数据点,然后数据库的字符串转换失败。我尝试将 varchar 字段设置为 UTF8 编码,但结果相同。

那么应该如何处理呢?

编辑:我可以使用数据库工具并编辑我的数据库字段以获取一些非 ASCII 数据,当我读回它时,它作为 utf8 编码的字符串出现,我可以使用 UTF8 解码,它是正确的。但是,如果不得到一堆??????,将数据写回该字段似乎是不可能的。在数据库中。我尝试过 ParamByName ('Somefield').AsString:=somewidestring;和 ParamByName ('Somefield').AsWideString:=somewidestring;我只是在数据库中得到垃圾...

EDIT2:这是代码(在一次迭代中)...



procedure TFormnameEdit.savename(id : integer);
begin
With DataModule.UpdateNameQuery do begin
ParamByName ('Name').AsString:=UTF8Encode(NameEdit.Text);
ParamByName ('ID').AsInteger:=id;
ExecSQL;
Transaction.Commit;
end;
end;

最佳答案

按照 @Lightbulb 的建议,将 lc_ctype=UTF8 添加到 TIBDatabase 参数解决了问题。

关于Delphi XE、Firebird 和 UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10892779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com