整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

html乱码-解决gb2312编码导致乱码问题

几天保存了网络上的一个页面,浏览器打开后,发现是乱码。如下图:

乱码网页

出现这个问题怎么处理呢?下面帮你解决

页面html源码

查看html,看到这里用了国标标准,看源码截图

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

解决方法:

把gb2312改成utf-8即可

修改为utf-8

修改后的结果,如图:

修改后的展示

知识分享:

utf-8 和gb3212 的区别

utf-8 这个是国际通用字库,支持各种不同的语言

gb3212这个是中国的字库,支持简体中文和少数外语+一些符号,文件资源少一点

区别:utf-8跨平台兼容性更好,由于它字库更全所以加载会慢好多

html的charset属性

charset属性是定义HTML文档的字符编码格式。

常见的字符编码有:Unicode、utf-8、gbk、gb2312

其中:

gbk是国家标准的扩展版(增加了繁体并包含所有亚洲字符集)

Unicode是国际组织制定的旨在容纳全球所有字符的编码方案,包括字符集、编码方案等。又称为万国码、统一码、单一码

景说明

假设需要劫持http响应并在html页面中注入一段js代码后再传回浏览器,实现在浏览器出现一个弹框消息提醒。

由于原始html页面编码格式存在UTF-8、GBK等多种编码格式,如果注入的js包含中文消息的话,那么在UTF-8或GBK编码的页面就会有一个出现乱码。有没有办法做到不管是针对GBK、UTF-8编码的页面都能做到正常显示而不会出现乱码哪?

产生乱码的原因

首先来分析一下产生乱码的原因,我们在浏览器看到的信息都是通过图形学手段在显示器上呈现出来的,而实际保存在计算机硬件上的都是0和1(因为计算机实现是基于二进制),那么计算机要显示、传递信息就需要依靠一套规则把一串串的0和1识别为正确的字符,这就是编码。

例如01000001在ASCII编码规则下对应字母A。相同的0/1串,不同的编码解析出的字符一般是不同的,因此如果html页面按照UTF-8的编码解析正常,那么按照GBK的编码解析就会是乱码了。根据上面的示意图,假设注入的js代码为utf-8编码格式,而原始html编码格式也为UTF-8编码格式,那么最终注入这部分中的中文就能正常显示,但是如果原始html为GBK编码,那注入的这部分js代码的中文就会显示乱码。

解决办法

有一种unicode统一编码字符集,目标是把所有文字、字符统一编码,也就是一串0/1组合在unicode字符集下对应的字符是唯一的,不会存在歧义。而js是支持解析unicode字符的,那么就可以在注入js中把要显示的消息统一转换为unicode编码,浏览器端去解析这个unicode编码,这样不管原始html是UTF-8还是GBK,都能正常显示中文。

原始注入js代码关于中文字符的部分

// utf-8编码格式
let message = "中文";

解决乱码的注入js代码关于中文字符的部分

// utf-8编码格式
let message = "\\u4e2d\\u6587";  // 这个编码对应上面的message"中文"

注意:

  1. 注入的js代码仍然是utf-8编码格式,只是消息内容转换为unicode编码的形式;
  2. unicode中0x4e2d表示的0/1串对应汉字"中",0x6587对应的0/1串对应汉字"文";
  3. message其实也不是真正的unicode编码,它只是普通的字符串,只是使用了unicode对应的码点(也就是二进制对应的数值),因为可以利用这个码点在浏览器中恢复出正确的字符,事实上unicode字符集并没有规定具体的编码格式。

几天有OMI的用户反映,安装OMI时有中文乱码现象,我还说不可能。我们的程序在windows,linux都部署过无数次了,开发时都是UTF8编码的,咋还会乱码呢。结果看了半天也没看出个啥,还是没解决。

最近新安装程序时,新下载了一个tomcat8.5的版本,一跑程序还真是html页乱码了,但JSP页没事。因为之前我们的程序都是跑在tomcat7,最高是tomcat8.0,没试过更高的,高版本确实有问题,且控制台中文也是乱码。

一、尝试了一些网友给的办法,下面说一下解决方案:

1、tomcat\bin\catalina.bat 中添加,

set JAVA_OPTS=-Xms512m -Xms1024m -XX:MaxPermSize=1024m -Dfile.encoding=UTF-8

我的添加位置如图

​前面是正好顺便设置了JVM的内存,解决问题的主要后面的部分。

2、修改tomcat\conf\server.xml,加入 URIEncoding="UTF-8"

加入如图位置

​好象是第一步就可以了,保险起见第二步也加上吧 。

二、关于控制台乱码解决办法:

修改tomcat\conf\logging.properties

#java.util.logging.ConsoleHandler.encoding = UTF-8(GBK)

将UTF-8改为GBK,或者把整行注掉

我是把相关编码全注了

以上,如未解决问题可以加QQ群交流,群名:Kettle实战。