【问题标题】:Delphi - DBGrid does not display UTF8 calculated fieldDelphi - DBGrid 不显示 UTF8 计算字段
【发布时间】:2012-08-30 00:04:34
【问题描述】:

我有一个 TDBGrid 链接到一个 TDataSource,后面有一个 TFibDataSet。在数据集的 OnCalcFields 上,我尝试添加字符串“Russisch (русский)”。

procedure TForm1.pFIBDataSet1CalcFields(DataSet: TDataSet);
begin
  DataSource1.DataSet.FieldByName('Language').AsString := ('Russisch (русский)');

问题是在网格中结果显示为 :Russisch(????????)

 DataSource1.DataSet.FieldByName('Language').AsWideString :=('Russisch (русский)'); 

结果相同

FibDataBase 组件的 ConnectParams.Charset 设置为 UTF-8。我还设置了 DBParams 值lc_ctype=UTF8

我在这里做错了什么?

LE:Delphi XE, Firebird and UTF8 - 这并不能解决我的问题。

LE1:问题仅出现在计算字段上。实时数据“Russisch (русский)”正确显示。

【问题讨论】:

  • 这种情况是否仅发生在计算字段或实时数据中?
  • 我现在做了一个测试,它只发生在计算字段上。如果实时数据是“Russisch (русский)”,则正确显示。
  • 我目前无法访问 Delphi XE。查看AsString 的定义。是AnsiString吗?
  • 我尝试将其设为 AsWideString,结果是一样的
  • 如果您使用持久性字段,请确保将其定义为 T(FIB)WideStringField 字段而不是 TStringField。

标签: delphi delphi-xe firebird2.5 tdbgrid fibplus


【解决方案1】:

我猜你犯了我经常犯的同样的错误。当您创建这样的字段时:

它是ANSI。您必须选择 WideString 才能使其成为 unicode:

【讨论】:

  • 基本上这意味着 FIB 中有一个残酷的错误(它是 FIB+ 标记的吗?不是 FIB+ 类标记为前缀 TpFIB...?)
  • 你在 cmets 中复制了我的答案;)
  • @Marcodor 我刚刚在您的评论中添加了图片;)
  • @Arioch'该错误在“新字段”窗口后面的逻辑中。它仍然将string 视为AnsiString 而不是string
  • 为什么不呢?向后兼容性等。将 UnicodeString 常量转换为 AnsiString 字段类型时,该错误是转换丢失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
相关资源
最近更新 更多