阅读非Unicode,从SQLite数据库
问题描述:
非英语文本我们有写入到一个SQLite数据库和C#应用程序从数据库中读取旧MFC C++应用程序。阅读非Unicode,从SQLite数据库
C++应用程序在俄语Windows计算机的数据库中写入“шагпотокаработы”(西里尔文字符)。
当同样的C++应用程序读取它西欧(拉丁)Windows电脑上,它把它读成“OAAïîòîêàðàáîòû”(拉丁文表示)。
当C#应用程序读取它时,它将其读为“Unicode”(Unicode表示形式)。
这些应用中的无specifiy在数据库中的编码类型。我想阅读C#中的原文。
我找不到阅读文本时指定的编码类型有道。
我已经尝试过连接字符串,如Data Source=c:\mydb.db;Version=3;UTF8Encoding=True;
,但目前为止没有运气。
此外,我试图从“ ”获取字节数组并转换为西里尔文,但失败了。
有谁碰巧知道如何从SQLite数据库读取原来的俄文本回来?
答
所有SQLite的C API使用UTF-8的正常功能。 C#SQLite驱动程序会自动在UTF-8和C#字符串编码之间进行转换。
如果您没有从您的C#程序中获取正确的数据,那么C++应用程序可能实际上并未实际使用UTF-8。这一点由C++应用程序在不同代码页中给出不同结果的事实所证实。
如果可能,修复C++应用程序,或将数据库中的数据从原始编码转换为UTF-8。作为最后的手段,您可以更改C#应用程序以将所有字符串读为blob,然后将它们从原始编码转换为UTF-8。 (在任何情况下,你需要知道原来的编码是什么。)
正如我所说的,这将是最后的手段。你应该首先使用正确的编码。 –