使用 SQLite 和 WinForms 2.0 C# 的编码问题

Posted

技术标签:

【中文标题】使用 SQLite 和 WinForms 2.0 C# 的编码问题【英文标题】:Encoding problem using SQLite and WinForms 2.0 C# 【发布时间】:2009-01-31 11:25:11 【问题描述】:

我正在使用 .NET 2.0 开发 WinForms 应用程序,并尝试使用 SQLite 作为数据库解决方案。我的主要问题是当数据是非英语语言(在我的情况下是希腊语)时,我无法在 WinForm 中查看数据库中的数据。

出于数据库管理的目的,我使用SQLite administrator,它完全没有问题以希腊语返回数据。但是当我在表单中的 DataGridView 中加载数据时,我得到了那些可怕的“缺少字符”方形符号。

为了与数据库通信,我使用System.Data.SQLite 解决方案。

我在这里缺少什么吗?我寻找在数据库中设置默认排序规则但没有提出任何建议,因为 SQLite 不支持 SQL Server 之类的排序规则值(例如 COLLATE Greek_CI_AS)

谢谢

附:我正在使用 SQLite 3 和 System.Data.SQLite.dll 1.0.60。测试的连接字符串是: Data Source=test.db;UseUTF8Encoding=True;

【问题讨论】:

【参考方案1】:

您是从数据库中检索字符串还是字节数组?在内部,SQLite 使用 UTF-8 或 UTF-16 字符串(取决于用于将字符串插入数据库的方法),这是使用 sqlite3_column_text 获取字符串值时返回的内容。

另一方面,如果您请求一个 blob,它只会返回底层字节,这可能与您的应用程序期望的字符编码不匹配。

我不确定 ADO 提供程序如何映射到这些底层操作,但在我看来,如果您的文本没有以 unicode 形式返回,或者它是但应用程序以其他方式处理它,那可能是问题出在哪里。

http://www.sqlite.org/c3ref/column_blob.html

编辑:一边想一边尝试在SQLiteman打开你的数据库,看看有什么不同。

【讨论】:

【参考方案2】:

问题很可能是由 SQLite 管理员引起的。遵循 Mike 的建议后,我还使用 SQLiteman 来测试数据库。当我使用 SQLite 管理员查询我插入的示例数据时,我得到了与使用我的代码相同的“缺少字符”符号。

然后我尝试了相反的方法。我使用 SQLiteman 创建了一个数据库,添加了一些行,并且代码以正确的格式获得了结果。然后我在我的应用程序中添加了一行,结果再次正确。

非常感谢迈克,您的建议帮助了我。

另外,我绝不想暗示 SQLite 管理员不是一个好的应用程序。但是,它可能与特定情况有问题。 再次感谢

【讨论】:

以上是关于使用 SQLite 和 WinForms 2.0 C# 的编码问题的主要内容,如果未能解决你的问题,请参考以下文章

在 CakePHP 2.0 中使用 SQLite3

WinForms的免费或开源图表组件[关闭]

与 .NET 2.0/3.5 一起使用的最佳免费 ORM 工具 [关闭]

sqlite方法-2.0

NHibernate 与 C#-Sqlite 在 > .NET 2.0 中没有 DbConnection

SQLite 是不是适用于实体框架?