c# sqlite 中文乱码

c# winform sqlite 中文乱码 

原文 http://yefenme.blog.163.com/blog/static/13069770420132284424484/


第一次使用sqlite做数据库,安装和使用还算简单和顺利,但是在操作数据的时候,
数据库中是正常的中文,但是用winform查询出来后,中文全是乱码。
搞不懂啊,代码里转码后,还是乱码,所有的编码格式都试过了,
是这样转码的,把UTF-8换成UTF-16,UNICODE,GBK,GB2312等等都没用:
codeBean.Datakey = Encoding.Default.GetString(Encoding.Convert(Encoding.GetEncoding("UTF-8"), Encoding.Default, Encoding.GetEncoding("UTF-8").GetBytes(datarow["datakey"].ToString())));

网上也找遍了,很多人都问过这个问题,但是没有明确、有效的答案。
还是自己研究吧,我用的sqlite界面管理工具是Sqlite Developer,如图:
 
此工具一打开就是这个界面,注意工具栏Data Encoding 那一栏!
默认显示的是ANSI编码,意思是本地系统默认编码。
由于第一次使用sqlite和这个工具,我就直接建表,然后用insert into语句插入数据了,
很顺利啊,插入的中文在Sqlite Developer中查询出来是正常的,
不过所有的操作都是在ANSI编码选项下操作的,
我也试过把Data Encoding 那一栏改成UNICODE,
但是Sqlite Developer中查询出来中文就变乱码了,于是坚信在ANSI编码下操作肯定是对的。
噩梦来了,当用winform查询数据时,中文全变乱码了,转码都没用。
奇怪啊,数据库里面都能正常显示中文,查询出来怎么变乱码了?
肯定是代码里的转码问题!!!!
一般人估计都会这么想,我也是这么想的,然后花了大量精力和时间在代码里折腾转码这个事情,
到最后还是搞不定!网上也找不到答案,怎么办呢?凉拌!!!!
不过网上有个示例给了我启示,这个示例工程名叫“SQLiteWinForm.rar”,
里面有个test.db3的数据库,我用Sqlite Developer工具打开后,里面的中文能正常显示,
我一看Data Encoding 那一栏,是UNICODE的,于是突然灵感来了,
我把我数据库的数据全部清空,把Data Encoding 那一栏设置成UNICODE编码后,
再把我的中文数据插入进去,这时候在Sqlite Developer工具里面的Data Encoding=UNICODE编码下,
我的中文数据显示正常了,而不像之前那样在Data Encoding=ANSI编码下插入数据后,
再把Data Encoding=UNICODE后我的中文数据是乱码。这时候我似乎感觉问题差不多快解决了。
把winform里面的转码代码去掉后,运行查询出来的数据是中文了,哈哈,问题解决!!
我又把转码的代码加上,查询出来的数据还是中文,看来之前的方向错了,问题的根源在数据库!
 

你可能感兴趣的:(c# sqlite 中文乱码)