我在Firebird中遇到了字符集问题。我有一个包含80多个表的数据库,这是我几年前开始的,它的默认字符集是NONE,但我将每个VARCHAR字段都设置为UTF-8(也将排序规则设置为UTF-8(。我一直把它用于英语和希伯来语,没有问题,但现在我用俄语/乌克兰语输入,字段中填充了问号(????(。火鸟大师和火焰罗宾都在数据中显示了这些问号。如果火鸟2.5.8有用的话,我会用它。从Stack Overflow的回答中,我发现每个字段都有自己的字符集,那么我缺少什么呢?
很可能您错过了连接字符集。如果它是NONE,数据将按原样放入字段中,因此即使字节序列偶然对UTF-8有效,它也可能毫无意义。当您尝试检索这些损坏的数据并显示它们时,结果是问号,它是目标代码页中丢失字符的默认替代字符。AFAIK Maestro和Flame Robin都是ANSI应用程序,因此它们只能在Windows上显示当前ANSI代码页中的字符(我怀疑在您的情况下是希伯来语(。为了显示完整的Unicode数据,您需要其他东西。
因此,首先你必须检查数据库中的数据是否真的是有效的UTF-8,俄语/乌克兰语字符是否有正确的编码。您可以通过将其转换为字符集OCETS并用十六进制检查结果来实现这一点。如果数据库中的数据正常,那么问题就出在显示应用程序方面。
感谢user1396…和Mark Rotteveel(对延迟表示歉意(。
问题不在Connection,但你们都把我送到了正确的地方寻找——如果写在DB中的数据真的是UTF-8的话。
通过使用";困难的";像希伯来语这样的语言,我认为其他所有语言都可以使用。
我使用Delphi,问题是数据真的没有保存为UTF8,即使我知道Delphi字符串是Unicode。解决方案是将数据保存为WideString,而不是令我惊讶的与Unicode\UTF8…不同的String
谢谢你们!