我在Firebird3数据库上使用Delphi2009和IBX(我没有选择其他技术的选择,我必须适应这种情况)。我有以下定义:
Firebird BLOB字段定义为:
BLOB SUB_TYPE 0 SEGMENT SIZE 80
Twidemmofield定义为:
object MainQryNOTES: TWideMemoField FieldName = 'NOTES' Origin = 'INVOICES.NOTES' ProviderFlags = [pfInUpdate] BlobType = ftWideMemo end
测试字符串是“,%”,其中可以从IBExpert软件的BLOB字段中读取:
26 04 35 04 3B 04 4C 04 20 00 3F 04 3E 04 20 00 38 04 3D 04 44 04 3B 04 4F 04 46 04 38 04 38 04 2C 00 20 00 25 00
奇怪的是Delphi颠倒了字节顺序,例如西里尔字符的十六进制UTF8表示法是04 26,但它存储在数据库中是26 04,其他字符的情况也完全相同(人们可以借助表格来检查这一点) https://www.w3schools.com/charsets/ref_utf_basic_latin.asp 和 https://www.w3schools.com/charsets/ref_utf_cyrillic.asp
那么-如何配置twidemmofield以请求不转换UTF8字符串的字节顺序?
您的文本没有编码为UTF8,而是编码为UTF16。角色是 U+0426
换言之,一切都按预期和设计进行,我看不出你有必要尝试修复任何东西,因为没有任何东西是坏的。