文本文件的编码格式问题

文本文件(包括txt,html,xml,js等等后缀)的编码格式主要分为:

        1.ANSI

        2.Unicode

        3.Unicode big endian

        4.UTF-8

 

其中,不同编码格式的文本,根据文本的前两个字节来定义其编码格式(二进制方式打开才能看到)

 

        ANSI:                                 无格式定义;

        Unicode:                            前两个字节为FFFE;

        Unicode big endian:           前两字节为FEFF;

        UTF-8:                                前两字节为EFBB,第三个字节为:0xBF

以上是网上常用的说法,但实际上很多文本文件(如UE,记事本)在处理文本文件的时候,并不是单单只根据

前两个字节来决定如何解析改文本文件的。典型的我在MyElicpse里新建一个UTF-8格式的文本文件,用二进制

方式打开查看,前两个字节并不是EFBB而是实际的文本的UTF-8编码编码,如果只是按以上根据文本文件的前两

个字节来解析文件应该会解析成ANSI,但因为内部的文本实际常用的是UTF-8方式编码,结果只能是乱码。

      但结果惊奇的是记事本和UE都能正确的解析,在记事本中选择另存为的时候从默认的编码格式可以看出来,

记事本是以UTF-8的形式去解析的。虽然前两个字节不是EFBB。

 

      总结以上,个人认为。对于文本文件,如果显式地定义了文本文件后面的内容采用的编码格式,则文本处理软件

就会按照定义的方式去解析后面的内容。如果没有定义则文本处理软件(如UE,记事本)则不一定是常用ANSI去解析

而是智能的去分析文本文件采用的编码格式,试图正确的显示文件内容。

 

 

----------------------------------------------- ANSI 格式 和 UTF-8 格式的个人理解 -----------------------------------------------

在做B/S形式的系统时,写html,js等 遇到一个问题就是不同浏览器页面显示乱码的问题,就和这文件格式和ANSI编码与UTF-8

有莫大关系。写了一个html格式的文件charset 用了UTF-8格式然后,script标签导入js,结果发现在IE里面无法解析,而火狐里

中文乱码。

      代码片段如下:

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

         <script type="text/javascript" src="js/login.js"></script>

 

  原因在于,我页面利用UTF-8编码格式去解析。然而login.js因为文本文件默认新建出来采用的是ANSI格式,问题就出来了

  ANSI编码是区域相关的,例如会有这样的情况假设0001在中国会解析成‘我’这个字符,而在韩国就可能解析其它字符。

 

   而上面代码中因为login.js采用的是ANSI浏览器就无法知道采用哪国语言去解析了,如果采用页面一样的utf-8解析那肯定乱码,

   所以做法是,修改页面charset让浏览器知道用哪个国家的语言解析js文件。于是有

 

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

         <script type="text/javascript" src="js/login.js"></script>

    这时候浏览器(不是太傻的话)就会采用gb2312去解析login.js就可以准确显示中文了。

 

 

   另一种解决方案是显式地在script标签注明,该login.js用的是哪国的语言。如下

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

     <script type="text/javascript" src="js/login.js" charset="gb2312"></script>

 

  问题同样得到解决。

 

   于是总结:个人认为UTF-8是国际化的编码,在不同国家同一个编码假设如0001不会解析成不同的字符。

   而ANSI只是区域化的编码不同国家不同标准,也就是相同的编码如0001可能会被解析成不同的字符,于是就有了乱码的产生

   如果乱码的是源代码则造成功能的无法实现。

 

 

  ------------------------------------------------------------------------------------------

  以上纯属个人见解,希望各位共同讨论,指正

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值