摘要:在命令行上通过sqlite3.exe创建数据库后,通过insert语句插入中文内容,然后在程序或sqlite管理工具中打开乱码。解决这个问题的方法是在程序中做好代码转换,并确保存储utf-8字符。经过研究发现,问题的主要原因是,当您写入数据时,字符代码是ANSI,而当它在DBGrid中显示时,它以UTF-8代码显示,因此存在乱码。解决方案是根据UTF-8代码编写,例如C/C++代码?
在命令行下通过sqlite3.exe创建数据库后,通过insert语句插入中文内容后,在程序或sqlite管理工具中打开乱码。网上有篇文章描述的就是这样一个过程。链接:http://www.cnblogs.com/niunan/archive/2009/10/31/1593516.html
通过谷歌资料发现,这个问题很难解决,要么插入中文乱码,要么只能显示中文不能插入,有篇文章描述:http://bbs.51cto.com/thread-1072214-1-1.html。
解决此问题的方法是在程序中做好编码转换,保证存入的是utf-8字符即可。相关文章:http://bbs.csdn.net/topics/390245535
引用以上网页内容:
|
我来了,楼主还在么? 经研究发现,问题的主要原因是你写入数据的时候,字符的编码是ANSI的,而在DBGrid中显示时,则是按UTF-8的编码显示,所以出现乱码。那么解决方法就是:写入时按UTF-8编码写入,如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | void __fastcallTForm1::Button3Click(TObject*Sender)
{
char *errmsg;
AnsiStringstrSQL=AnsiString(). sprintf (
"insertintot1(id,name)values(1,'%s')" ,
AnsiToUtf8( "张三" ));
int result=sqlite3_exec(PDB,strSQL.c_str(),0,0,&errmsg);
if (result)
{
Label1->Caption= "插入数据失败" ;
}
else
{
Label1->Caption= "插入数据成功" ;
}
}
|
|
|