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文的会保持不变,而中文的会自动转换成合适的编码,执行即可实现要求。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)