将WideString转换为String

时间:2013-04-29 10:28:45

标签: delphi firebird delphi-xe

如何从字符串中替换空宽字符串?

e.g: '我会'转换为'你好'

我从数据库中读取文本blob字段,并希望将其存储在另一个表中。当我读它时,我得到额外的空格,当我存储它时剩余的额外空间,并且在下一个查询时无法正确读取。

DXE,Firebird 2.5

更新
我使用IBQuery - > DataSetProvider - > ClientDataSet没有设计时创建的字段。 它接缝,IBQuery以错误的格式检索数据。

当前的代码:

blobStream := TStringStream.Create;
...
blobStream.WriteString(blobText); //blobText = 'H e l l o';
ibsql.ParamByName('ABLOBCOL').LoadFromStream(blobStream);
...
ibsql.ExecQuery;
...

在FB数据库中存储了'H e l l o',但它必须是'Hello'。由于它似乎是IBQuery中的一个错误,我需要一种方法来转换该字符串。

1 个答案:

答案 0 :(得分:7)

首先,我不会尝试描述如何从字符串中删除所有其他字符。虽然这似乎可以解决您的问题,但它只是在张开的裂缝上薄薄地张贴。你在这里有一个经典的文本编码不匹配。解决问题的真正方法是修复不匹配问题。

我怀疑在您未显示的代码中出现问题。正如我现在理解您的问题,您的string变量blobText包含错误编码的文本。但问题中的代码需要blobText作为输入,因此在我们到达问题中的代码时已经完成了损坏。解决这个问题的关键是将duff数据放入blobText

的代码

您需要找到分配给blobText的代码并解决那里的编码问题。看起来你已经采用了UTF-16编码文本并将其解释为具有8位编码。我可以推测这将如何发生,但最好是查看实际代码,即分配给blobText的代码。如果您无法解决问题,请发布问题的更新。

我非常有信心数据库中没有错误,这只是编码不匹配。