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

例如:
'H e l l o'转换为'Hello'

我从数据库中读取了一个文本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 ll o”,但必须是“ Hello”。由于它似乎是IBQuery中的错误,因此我需要一种转换该字符串的方法。

最佳答案

首先,我不会尝试描述如何从字符串中删除所有其他字符。尽管这似乎可以解决您的问题,但它只能将薄薄的纸覆盖在裂缝上。您所拥有的是经典文本编码不匹配。解决您的问题的真正方法是解决不匹配问题。

我怀疑问题出在您未显示的代码中。据我所知,您的string变量blobText包含错误编码的文本。但是问题中的代码以blobText作为输入,因此,当我们到达问题中的代码时,损害已经已经造成。解决此问题的关键是将duff数据放入blobText的代码。

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

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

10-05 22:42