
建议题主好好debug调试一下
1,前台页面提交数据到后台接收,这个期间是否已经变成乱码。如果是,那就需要在前台进行编码转换,直至后台接收到的为正常的内容为止。
2,后台接收正常之后,期间有没有什么其他 *** 作(一般很少有变化),那就是在存储数据库的时候,对于数据库的编码有没有设定,如果没有设定的话,那就设定一下对应系统设置数据库编码的地方为 utf-8
其他的情况可能就得看真实环境进行分析
首先,这个问题一般都是字符集不匹配的问题;就是说数据库中存储数据用的字符集,和你连接数据库用的字符集不匹配。
然后,就是看你的数据库了
oracle的话
先确认数据库服务所采用的字符集,select userenv('language') from dual;
然后修改客户端的环境变量,比如set nls_lang=AMERICAN_AMERICAZHS16GBK
mysql的话,一般都是用utf8的字符集
在你客户端连接时,也要保证字符集一致才行
其它类型数据库的话,看具体的解决方案
汉字乱码现象有4种类型:
1文本乱码:是Windows系统显示乱码,如:菜单、桌面、提示框等。这是由于注册表中有关字体部分的设置不当引起的;
2文档乱码:是各种应用程序、游戏本来显示中文的地方出现乱码。这种乱码形成的原因比较复杂,有第1类的乱码原因,也可能是软件中用到的中文动态链接库被英文动态链接库覆盖所造成的;
3文件乱码:主要是指邮件乱码;
4网页乱码:是由于港台的繁体中文大五码(BIG5)与大陆简体中文(GB2312)不通用而造成的。
消除各类乱码的方法
一 系统乱码的消除方法
这类乱码是由于在Windows注册表中,关于字体部分配置不正常造成的,即使你用内码翻译软件处理也不会消除这类乱码。那怎么办呢?请跟我来:
方法一:找一台与你的Windows版本相同且显示正常的机器,依下列步骤进行:
1在正常机器上选择“开始”→“运行”,在对话框中键入“regedit”,打开注册表编辑器;
2请你将光标定位到“HKEY_LOCAL_MACHINE\ system\CurrentControlSet\Control\ Fontassoc”,然后选择“注册表”→“导出注册表文件”,再选择“分支”,导出该分支注册表信息到文件(如ZTREG)中;
3把ZTREG文件拷贝到你那显示乱码的机器上,方法是:在显示乱码的机器上运行“regedit”,打开注册表编辑器,选择“注册表”→“导入注册注册表”,把ZTREG文件导入注册表中即可。
方法二:如果你找不到一台与你的Windows版本相同且显示正常的机器,则需要手工恢复字体部分的注册表
项,其步骤是:
1首先在显示乱码的机器上选择“开始”→“运行”,在对话框中键入“regedit”,打开注册表编辑器;
2选择“HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Control\Fontassoc”,正常情况下,会有Associated DeaultFonts、Associated CharSet两个文件夹,其正确的内容应是:
子目录内容
中文Win98
中文Win98(OEM版)
中文Win2000
Associated CharSet
ANSI(00)=“yes”
GB2312(86)=“yes”
DEN(FF)=“yes”
SYMBOL(02)=“no”
ANSI(00)=“yes”
GB2312(86)=“yes”
OEM(FF)=“yes”
SYMBOL(02)=“no”
ANSI(00)=“yes”
OEM(FF)=“yes”
SYMBOL(02)=“no”
Associated DefaultFonts
AssocSystemFont=“simsunttf”
FontPackageDecorative=“宋体”
FontPackageDontcare=“宋体”
FontPackageModern=“宋体”
FontPackageRoman=“宋体”
FontPackageScript=“宋体”
FontPackageSwiss=“宋体”
或
AssocSystemFont=“simsunttf”
FontPackage=“新宋体”
FontPackageDecorative=“新宋体”
FontPackageDontcare=“新宋体”
FontPackageModern=“新宋体”
FontPackageRoman=“新宋体”
FontPackageScript=“新宋体”
FontPackageSwiss=“新宋体”
3当出现汉字乱码时,上述两个文件夹中的内容就会不完整,有的没有Associated CharSet文件夹或其中的内容残缺不全;有的 Associated DefaulFonts下的内容残缺。如果遇到这种情况怎么办呢?其实你只要打开注册表编辑器,在 “HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Fonassoc”下,根据以上的正确内容恢复即可。
二 应用程序、游戏乱码的消除方法
明明是中文软件,可显示界面上却出现乱码,这可能是由于注册表中关于字体设置的信息不正确地被改变而造成的,一般是因为软件的中文链接库被英文链接库覆盖而引起的,这种现象经常发生在用微软开发工具,例如VB、VC开发的中文软件上。在这类软件中,菜单等显示界面上的汉字都是受一个动态链接库“DLL文件”控制,而软件的这个动态链接库一般是安装在Win 98/2000的System目录下的,如果以后你安装了某个英文软件也使用同名的动态链接库,则英文软件的动态链接库就会覆盖掉你原先的Windows\System下的中文软件的动态链接库。这样,当你运行中文软件时就会调用英文的动态链接库,因此出现乱码。解决办法是重新安装中文软件,恢复中文动态链接库即可。
数据库中关于字符集的种类有很多,个人建议,数据库字符集尽量使用utf8(utf-8),以使你的数据能很顺利的实现迁移,因为utf8字符集是目前最适合于实现多种不同字符集之间的转换的字符集,尽管你在命令行工具上无法正确查看数据库中的内容,我依然强烈建议使用utf8作为默认字符集如果你想使用gb2312编码,那么建议你使用latin1作为数据表的默认字符集,这样就能直接用中文在命令行工具中插入数据,并且可以直接显示出来而不要使用gb2312或者gbk等字符集,如果担心查询排序等问题,可以使用binary属性约束 对编程有影响的主要是客户端字符集和数据库字符集(还有一个服务器字符集,不知道干什么用的), 数据库中常用的 *** 作就是保存数据和读取数据,在这过程中,乱不乱码和数据库字符集貌似没有什么关系。我们只要保证写入时选择的字符集和读取时选择的字符集一致,即只需保证两次 *** 作的客户端字符集一致即可。 \x0d\在MySQL的客户端上执行一次查询的过程一般是,在客户端的提示符后面输入一条SQL语句,回车,然后终端显示出查询的结果。这个过程中,只有终端和三个MySQL的系统变量指定了正确的字符集,才能保证我们将一个正确的SQL语句送到服务器,然后服务器返回正确的结果,并且在终端正确显示。 \x0d\三个MySQL的系统变量是: \x0d\1 character_set_client,终端字符集,告诉Server客户端提交的SQL语句的编码格式 \x0d\2 character_set_connection,连接字符集,是服务器翻译SQL语句时用到的编码格式 \x0d\3 character_set_results,返回的结果集的字符集,是服务器返回结果集之前把结果集转换成的编码格式 \x0d\在MySQL终端通过执行命令 show variables like ‘char%’ 可以查看这几个变量的值。这三个变量通常都设定为同一种字符集,用命令set names [charset name]就可以修改这三个变量的值。一般来说,只要你设定了能够表示你的数据的字符集,你查询的结果都可以在终端正确显示。 \x0d\举个例子,使用的表t1是utf8编码,表中的字段c1继承了这个编码,表创建如下 \x0d\mysql> create table t1 ( c1 text not null ) character set utf8; \x0d\用的字符是汉字“范”,gbk编码为B7 B6,utf8编码为E8 8C 83 \x0d\用下面的SQL语句插入数据 \x0d\mysql> insert into t1 values( ‘范’); \x0d\a)如果终端设置为utf8,并且执行了 set names utf8,那么插入到数据库中的就是“范”这个字的utf8编码,这个过程中MySQL不需要做编码转换。写入数据库的内容可以通过执行 select hex( c1 ) from t1 得到数据的十六进制编码来验证。 \x0d\\x0d\b)如果终端设置为 utf8,并且执行了set names gbk,那么执行完这个插入 *** 作后,写入的二进制数据是E9 91 BC,这是“汉字“锣”的utf8编码。这是因为,终端输入的“范”用的是utf8编码,而服务器以为终端发送过来的内容是gbk编码,所以在向t1表中插入的时候进行了一次gbk到utf8的转换,结果当然是错误的。 \x0d\\x0d\c)如果终端设置为gbk,并且执行了set names gbk,那么执行完插入 *** 作后,写入t1的依然是“范”这个字的utf8编码。插入过程中,终端输入的是“范”的gbk编码B7 B6,服务器被告知终端发过来的SQL语句是gbk编码(由character_set_client指定),所以在插入数据前做了一次gbk到utf8的编码转换。 \x0d\\x0d\d)如果终端设置为gbk,并且执行了set names utf8,那么执行完插入 *** 作后,MySQL会报出一个数据被截断的警告。实际上,输入终端的是“范”这个字符的gbk编码B7 B6,而服务器被告知客户端发过来的SQL语句是utf8编码,所以在执行过程中没有做转码,直到插入数据的时候,发现B7 B6不符合utf8的编码规则,给出了警告信息,实际插入的数据是3F 3F,也就是两个问号。 \x0d\\x0d\查询的时候是同样的道理,MySQL也是根据set names设定的字符集来对返回给客户端的结果集做相应的编码转换,如果转换的结果和终端显示的字符集一致,就能正确显示,如果不一致就是乱码。 \x0d\\x0d\结论是,只要终端的字符集和set names指定的字符集一致就可以让MySQL在处理过程中执行正确的转码并且正确地显示。 \x0d\\x0d\另外,如果通过程序 *** 作MySQL数据库, 那么也需要事先执行set names命令来指定程序希望输出的字符集。比如,用程序从一个utf8编码的数据库向另外一个gbk编码的数据库进行数据迁移,在选取源数据库数据之前,需要执行set names gbk,才能取到gbk编码的数据。
以上就是关于Mysql数据库乱码 就是网页上存入中文,但是成功保存数据后跳转页面出现乱码,数据库里面刚刚存入的全部的内容,包括:Mysql数据库乱码 就是网页上存入中文,但是成功保存数据后跳转页面出现乱码,数据库里面刚刚存入的、把数据库中的中文输出出来为什么乱码、请问我的jsp网页文本框中输入中文,存到数据库中显示为乱码如何解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)