好程序员web前端教程分享js文件引用编码方式

数据部
• 阅读 143

好程序员web前端教程分享js文件引用编码方式,js外部文件编码由这些因素决定:1.如果Apache有DefaultCharset,则js文件解析用服务器指定的编码;2.如果PHP header声明charset为编码utf-8,则文件编码用utf-8来解析。3.如果以上两个都为空,页面编码由meta标签决定。4.如果以上声明都没有,则会使用utf-8来解析。5.如果页面编码为gbk,而js文件编码为utf-8,则可以在js属性中定义charset='utf-8'。

昨天帮同事解决的一个问题,GBK的页面(不要问我为什么GBK,因为GBK,所以GBK),引用了Google map的API, 但是由于GoogleMap API返回的js脚本是utf-8的,所以导致在IE下, 浏览器无法正确解析.

也就是, 由于服务器中生成的HTML是基于gbk编码的, 并且由于Apache的DefaultCharset(后叙), 所以导致IE会以gbk编码去解析从外部引入的GoogleMap js,那肯定是不能正确解释的.

浏览器判断一个页面的编码有俩个途径, 一种是通过HTTP响应头,

HTTP/1.x 200 OK
Date: Sat, 18 Oct 2008 21:53:51 GMT
Server: Apache/2.0.52 (Red Hat)
X-Powered-By: PHP/5.3.0alpha2
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=GB2312
注意最后一行, 这个是由HTTP头部指明的页面编码格式.

另外一种就是我们常见的, 也会另很多初学者困惑的meta:

问题就在于,没有一个统一的标准,来指明这俩中方式的优先级, 不同的浏览器有着不同的优先级策略.这也就是为什么,我们在FF下正常浏览的页面,在IE下会乱码的原因.

我之前的文章Apache的Charset设置中已经介绍过了在Apache下设置DefaultCharset以后产生的影响,

这个问题已经遇到过俩次了,就是页面中明确指明了编码是UTF8,但是显示是乱码。

虽然知道解决方法,也知道是Apache的原因,但是一直没有去找其所以然,今天趁机,就研究了一下。

  1. 页面没有指定charset , Apache配置defaultcharst gbk , 页面文件编码是utf-8

结果: 乱码,使用wireshark抓包,发现服务器返回的header中指明了:

Content-Type:text/html;charset=GBK
结论:当页面没有指明charset的时候,Apache的defaultcharset起作用

  1. 页面指定charset为utf-8, Apache配置defaultcharset gbk. 页面文件是utf-8

<head>

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

</head>
<body>

    <div id="page-header">
     测试Apache DefaultCharset
    </div>

</body>
</html>
结果还是出现乱码。

结论:当Apache配置了DefaultCharset, 将忽略页面的charset申明。

3 PHP header申明charset为utf8, Apache配置defaultcharst gbk,页面文件编码是utf8

header("Content-Type:text/html; charset=utf-8");
结果 : 页面显示正常。

4 Apache设置DefaultCharset off

结果,页面显示正常。

翻阅了下Apache2的手册:

AddDefaultCharset指令
说明当应答内容是text/plain或text/html时,在HTTP应答头中加入的默认字符集
语法AddDefaultCharsetOn|Off|charset
默认值AddDefaultCharsetOff
作用域serverconfig,virtualhost,directory,.htaccess
覆盖项FileInfo
状态核心(C)
模块core

当且仅当应答内容是text/plain或text/html时,此指令将会在HTTP应答头中加入的
默认字符集。理论上这将覆盖在文档体中通过<meta>标 签指定的字符集,但是实际
的行为通常取决于用户浏览器的设置。AddDefaultCharsetOff将会禁用此功能。

AddDefaultCharsetOn将启用Apache内部的默认字符集iso-8859-1。您
也可以指定使用在IANA注册过的字符集名字 中的另外一个charset。
比如说:
AddDefaultCharsetutf-8
也就是说,当Apache不指定defaultcharset的时候,页面编码由页面自己的meta标签指定。

当Apache指定的时候,将忽略页面中的meta标签指定的编码. 但是容许脚本直接header编码方式给客户端

最后,还有一个问题没有得出结果:

当Apache和页面都没有指定的时候, 又如何?

我在自己的机器上,如果都不指定, 默认还是utf8

在服务器端生成response内容以后, 如果脚本没有显示的调用header发送编码申明,那么Apache就会根据DefaultCharset生成响应HTTP头部的Content-type中的charset字段;

反之如果脚本显示申明了,那么就会按照脚本header申明中的charset设置.

这样到了浏览器端以后, 浏览器就可以根据HTTP头的charset申明来按照特定的编码格式解析获取到的HTML代码,但现在的问题是, 页面是GBK的,但是引用的外部js文件是utf8编码的,这样的情况, 我们可以使用一个script的属性来解决:

<script language='javascript' src='....' charset='utf-8'></script>

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java判断文本文件编码格式
上篇文章需要读取当前java或者配置文件的编码格式,这里主要支持UTF8、GBK、UTF16、Unicode等/判断文件的编码格式@paramfileName:file@return文件编码格式@throwsException/pu
Wesley13 Wesley13
3年前
java读取中文文本文件乱码问题
今天遇到的问题是这样:用java读取一个中文文本文件,但读取到的却是乱码,之前一直没有问题,查清楚后,原来是因为今天是用的windows的记事本来编辑的文件,因编码方式是的不同而导致了乱码,解决方法就是设置编码方式为“UTF8”,设置方法如下:FilefilenewFile("文件路径");Readerreader
皕杰报表在传参过程中乱码
当web项目的编码格式为UTF8的,在tomcat上集成部署,传参时中文乱码时,需要修改下列编码格式。​​解决方案:1、更改D:/Tomcat/conf/server.xml,指定浏览器的编码格式为“UTF8”:2、更改web项目WEBINF\resources下的Congfig.xml里的            UTF83、更改jsp中编码格式为utf8​
Stella981 Stella981
3年前
NodeJS 中文乱码解决
如果使用NodeJS。当有中文时,如果不做任何处理就会出现乱码。因为,NodeJS不支持GBK。当然,UTF8是支持的。所以,要确保不出现乱码: 1.保证你的JS文件是以UTF8格式保存的。 2.在你的JS文件中的writeHead方法中加入"charsetutf8"编码,如下例所示:  varhttpr
Stella981 Stella981
3年前
Eclipse为不同的文件类型设置编码格式和编辑器
不知道大家遇到项目中编码格式不统一的情况没有,哈哈,我们就是,比如java的编码格式是GBK,html等编码是UTF8,这样会导致很多问题,比如提交了一个UTF8的java文件到SVN,会导致后端编译错误。如果是项目建立的时候,大家一定要注意保持编码格式的统一呀,最好用UTF8。我记录一下,怎么在Eclipse中为不同文本设置不同编码格式和编辑器。
Wesley13 Wesley13
3年前
Java 使用 ResourceBundle 类读取 properties 文件中文乱码的解决方案
Java使用java.util.ResourceBundle类的方式来读取properties文件时不支持中文,要想支持中文必须将文件设置为ISO88591编码格式,这对于开发工具默认为UTF8来说很不友好,而且就算用ISO88591编码,当其他人将这个项目导入开发工具时很容易出现这个properties文件中的内容有乱码(前提是该文件中包含中文)
Wesley13 Wesley13
3年前
JAVA判断文件编码类型
java读取文件,处理过程中,可能因为文件的编码问题导致了中文乱码。有时需要将UTF8的改为ANSI的编码。以下代码就可以判断文件是什么编码方式。 主要jar包:cpdetector.jar  下载地址http://cpdetector.sourceforge.net/ 同时还需jchardet1.0.jar这个包,否则detec
Wesley13 Wesley13
3年前
CSS 样式书写规范
编码设置采用 UTF8 编码,在CSS代码头部使用:@charset"utf8";注意,必须要定义在CSS文件所有字符的前面(包括编码注释),@charset 才会生效。例如,下面的例子都会使得 @charset 失效:/字符编码/@charset"utf8";
Wesley13 Wesley13
3年前
URL编码以及get和post请求乱码问题
1. 什么是URL编码。URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服务器上。2. URL编码规则。每对name/value由&分开,每对来自表单的name/value用分开。如果用户没有输入值的那个
Python进阶者 Python进阶者
3年前
盘点一个文件读取时utf-8错误的解决办法
大家好,我是皮皮。一、前言前几天在Python白银交流群有个叫【大侠】的粉丝问了一个Python读取文件的时候报错的问题,这里拿出来给大家分享下,一起学习下。二、解决过程看上去代码有报错,截图如下。这个错误倒是很常见,因为数据没有给utf8编码,或者读取的时候,没有指定utf8编码,都会报类似的错。上图是他的代码,15行那里指定一下编码就可以了。指定编码
taskbuilder taskbuilder
7个月前
TaskBuilder前端页面JS脚本编辑
在前端页面设计器内,点击底部的“JS脚本”选项卡,可以打开JS脚本编辑器,查看和设置当前页面的JavaScript脚本有关的内容,包括以下几个部分:3.3.5.1外部脚本引用如果在前端页面里需要用到外部js文件的功能,则可以点击JS脚本设计器左上角“外部脚