Sqlite及其.net provider简介和中文编码问题

前端之家收集整理的这篇文章主要介绍了Sqlite及其.net provider简介和中文编码问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

sqlite的数据文件本身是使用utf-8或utf-16进行存储的,因此在中文支持上本来是没有问题的。

但在对于sql语句中的字符串,sqlite本身并不对它的编码进行变换,而是原封不动的拷贝。

因此如果用c/c++调用sqlite的API进行读写,如果不特殊处理,在windows中文版本上读写的中文字符串实际是gb2312编码的。这样存储的sqlite文件中的中文实际上就是gb编码。如果只是以这种方法进行读写并不存在乱码问题,因为被错写的中文也恰巧被错误的读了出来。但一旦与sqlite.Net混合使用就会出现乱码了。

因为.Net是平台无关的,它的string类中,字符是统一编码的,因此在sqlite.net与sqlite的接口处需要把.net string的编码转换成sqlite的默认编码,也就是utf编码。这就和前面c/c++的读写方法存在编码上的差异,如果用c/c++写.net读,或者.net写c/c++读都会出现乱码问题。

解决方法很简单,sqlite.net中的编码转换发生在sqlite3.cs文件中。它使用MarshalStr类来管理字符串,而它是可编码的,它的编码由sqlite3._enconding管理,因此只要把源码中

_encoding = Encoding.UTF8 替换成 _encoding = Encoding.Default 就可以了。

原文链接:https://www.f2er.com/sqlite/203172.html

猜你在找的Sqlite相关文章