碰到一个蛋疼的问题,
webform,web.config配置了网站全局为 utf-8
整个站点感觉编码是没有问题的,
但是,某几个页面,一整个页面,有几个汉字乱码,这几个汉字是很普通的汉字,
如果是编码问题,一整个页面就应该乱码,但是某几个汉字乱码,我真心就搞不懂了。
个人猜测应该是某些地方有什么特殊符号,编码不一致的情况下引发字符的“重新”组合,行程了一个新的”字“,所以乱码。
但是我真心找不出来,求支招。如下图:
而且,还有一个奇怪的问题,就是,这个乱码的位置有时候会变化,当我删除掉某些字的时候,乱码又跳到下一个位置去了。
还有,这个乱码,放一段时间会自己消失掉。。。。。比如今天早上来看,乱码没有了,然后可能下一个时间又出现在其他页面其他字符。
把乱码那一块的代码发出来看看
那一堆的代码。那 一块代码是从数据据读的,我确定我从数据库读出来的内容是没乱码的,
我单步调试,一直等到那个地方,看到我数据库出来的内容是正确的
乱码是数据库输出的吧 —— 把正确的内容(比如在记事本中输入),然后拷贝到数据库即可。如果是页面 —— 方法一样。
我希望是很了解的人,不要靠猜测的回答。这种回答,你让我怎么说?
@LoveCoder: 问问题是一种技术,问不清楚谁有能“很了解”? @花飘水流兮 说的没错。
@LoveCoder: 你的问题需要让人怎么回答?!
楼上说的有点道理,不过用带编码风格的记事本更好,比如editplus,notpad++,先把正常的汉字放进去,然后变动编码,找到与页面出现情况一致的就知道是怎么转换的了。
给一个图,谁会知道你哪里错了,我也是醉了
先不用说直接的原因,先猜测。主要是乱得太奇怪了,一堆文字就乱那么一两个字。
没人能通过看图说原因,我在这里提问是想想谁碰到过类似问题,说说自己的猜想。
我确定它并非是简单的编码问题。应该是某种特殊情况下出现的。因为这个乱码一下有一下没有。网站运行得好好的,突然就几个字乱码了。然后过几个小时又不见了。
肯定是文件标点啊,这些问题
文件?标点?详细点哥们
@LoveCoder: 检查哈文件里面有没有特殊标点,导致编码混乱
@silianpan: 关键是,放一段时间它又好了。而且我发现,每次乱码只要我把样式表去掉,就不乱码。但是同样的代码部署到不同机器,又不乱码。
但是过一段时间又不知道哪里会出现乱码,总之它就是鬼魅一样出现
看看你数据库的表的编码有没有设成utf-8
你这个好像不成立吧。我说了单步调试读出来的内容是正确的。
@LoveCoder: 那你试试清除浏览器缓存,强制刷新Ctrl + F5试试,再不行就把Cookie给清除了,再不行就不知道了。
听你这么叙述,感觉这个问题不像是简单是乱码问题,没见过乱码只乱其中几个字的。
话说回来,如果你后台调试发现字没有乱码,那么你再前端打断点调试一下,也可以alert试试。
@silianpan: 关键是,放一段时间它又好了。而且我发现,每次乱码只要我把样式表去掉,就不乱码。但是同样的代码部署到不同机器,又不乱码。
但是过一段时间又不知道哪里会出现乱码,总之它就是鬼魅一样出现
浏览器查看源码,显示的是乱码。
@LoveCoder: 亲,目前无能为力了,从来没遇到你这种情况。网上有人说这种一个页面上既有乱码又有没乱码的,可能内容本身就有问题,数据本身的问题可能。ps:解决了的话,知会一声,让我涨涨见识。
@让我发会呆: 内容肯定没问题,因为这个地方并不是一直乱码,乱码的位置总是不确定。比如现在没有一点乱码,不知道下一刻哪个页面哪个地方就乱码了。
唯一能确定的是,只要我取消掉所有css,就不会乱码。
但是,哪怕我不取消所有css,过几个小时他有会自动消失。
我估计css写法无关,只是因为有了css,浏览器按字节去流取内容解析的时候,估计那个地方顺利解析过去了。。。目前摘没找到原因。。。。
首先确认一下.aspx文件是否是UTF-8编码保存的?
dudu,我确定是utf-8保存,在vs里面,我用高级保存 然后选了一个 utf-8 带签名。
接下来怎么排除呢?拜托了。。。。。
而且每次连的位置不同,也会自己莫名其妙好掉。但是我改一下gb2312它又会好,但是指不定其他地方又会乱。
我该怎么一步步排查?
@LoveCoder: 在html head中改为 <meta charset="GB2312"> 试试
@dudu: 关键是首先我希望整站用utf-8编码
第二,就算在整站改为gb2312以后,也有这种情况,我以前整站用的就是gb2312,结果也是这种情况,最后找不到问题出在哪里。。。
@LoveCoder: 出现乱码的内容是如何输出的?
@dudu: 都有,第一个地方经常出现的,在我网站购物车页面,这个地方是文字直接写在aspx页面上,aspx是以utf-8带签名格式保存。
第二个常出现的地方是分类页面,是从数据库取(数据库内容正常),然后以一个Literal的服务器控件,在后台 Literal.Text="xxx" 这样的形式输出。
大致怎么排查呢?我发现下午的时候更容易出现乱码,早上来的时候一般都没有。
@LoveCoder: 非常奇怪的问题,我也没有好的解决思路。
好神奇的问题,我感觉只能靠你自己仔细捋了,从头到尾,都排查一遍,这要动手试
主要是我连最基本问题出在哪里都想不出来了,你觉得该怎么排查,一步步的排查。这要是和普通bug那样,能有头绪就还好。我一点辙都没有现在。。。
@LoveCoder: 我感觉哪里有错,你就去查哪里,它出现在哪儿,你就先去捋哪儿,从数据库到页面都捋一遍,让这个地方不出错再说