C# SQLite数据库中的中文是菱形加问号,请问读取后怎么转为正常的中文?

C# SQLite数据库中的中文是菱形加问号,请问读取后怎么转为正常的中文?,第1张

SQLite存储是UTF-8, 可以查阅资料求证下, 转换函数如下, 根据查到的编码替换下面的源编码和目标编码, 不行就多尝试几次

public string ConvertEnconding(string str)

{

var utf8 = Encoding.UTF8//SQLite源编码

var defaultCode = Encoding.Default//目标编码

var utf8Bytes = utf8.GetBytes(str)

var defaultBytes = Encoding.Convert(utf8, defaultCode, utf8Bytes)

var defaultChars = new char[defaultCode.GetCharCount(defaultBytes, 0, defaultBytes.Length)]

defaultCode.GetChars(defaultBytes, 0, defaultBytes.Length, defaultChars, 0)

return new string(defaultChars)

}

Sqlite默认保存数据是用UTF8格式,而现有程序开发工具都是默认GB2312的格式,所以你编程写的中文不转码直接写到库里后,用任何数据库工具看肯定都是乱码。但是读出来之后仍然是GB2312,所以显示正常。反之如果你用数据库工具写中文,则默认存UTF8格式,用程序读出来就是乱码。也就是你说的不可兼得。

如果要实现能够编程和数据库工具读写都正常,必须要转码。也就是说,保存时候,要把GB2312转成UTF8,而读出时候需要把UTF8在转成GB2312。

网上有源程序可用,叫做CCodingConv的类,你搜一个源码,在每次执行SQL语句之前,将其转换一下即可。将整个SQL语句进行转换,E文的会保持不变,而中文的会自动转换成合适的编码,执行即可实现要求。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11323311.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存