从SQLite数据库中读取非Unicode,非英语文本

时间:2016-12-14 11:11:26

标签: c# sql sqlite unicode encoding

我们有一个旧的MFC c ++应用程序,它写入一个SQLite数据库和另一个从数据库中读取的C#应用​​程序。

C ++应用程序从俄语Windows计算机中将“шагпотокаработы”(西里尔字符)写入数据库。

当相同的C ++应用程序在西欧(拉丁语)Windows计算机上读取它时,它将其读作“øàãïîòîêàðàáîòû”(拉丁语表示)。

当C#应用程序读取它时,它将其读作“ ”(Unicode表示)。

这些应用程序都没有在数据库中指定编码类型。我想阅读C#中的原始文本。

在阅读文本时,我无法找到指定编码类型的正确方法。

我已尝试过连接字符串,例如Data Source=c:\mydb.db;Version=3;UTF8Encoding=True;,但到目前为止没有运气。

此外,我试图从“ ”获取字节数组并转换为西里尔语但失败了。

是否有人知道如何从SQLite数据库中读取原始俄语文本?

1 个答案:

答案 0 :(得分:5)

SQLite C API中的所有常规函数都使用UTF-8。 C#SQLite驱动程序自动在UTF-8和C#字符串编码之间进行转换。

如果您没有从C#程序中获取正确的数据,那么C ++应用程序可能实际上并不是UTF-8。事实证明,C ++应用程序使用不同的代码页提供不同的结果。

如果可能,请修复C ++应用程序,或将数据库中的数据从原始编码转换为UTF-8。作为最后的手段,您可以更改C#应用程序以将所有字符串作为blob读取,然后将它们从原始编码转换为UTF-8。 (无论如何,您需要知道原始编码是什么。)

相关问题