web页面乱码的解决思路(Web开发中常见的乱码)

在微信公众号开发指定回复消息为文本格式的时候,尝试了几种换行方式都不行,最终了解即 XML 的换行应使用:,我来为大家科普一下关于web页面乱码的解决思路?下面希望有你要的答案,我们一起来看看吧!

web页面乱码的解决思路(Web开发中常见的乱码)

web页面乱码的解决思路

问题来源:

在微信公众号开发指定回复消息为文本格式的时候,尝试了几种换行方式都不行,最终了解即 XML 的换行应使用:

是字符实体编号(16进制),可以用于处理XML中文本的换行。

对应的正确代码在第9行(部分文字有修改):

<xml> <ToUserName><![CDATA[<%= toUserName %>]]></ToUserName> <FromUserName><![CDATA[<%= fromUserName %>]]></FromUserName> <CreateTime><% createTime %></CreateTime> <MsgType><![CDATA[<%= msgType %>]]></MsgType> <% if (msgType === 'text') { if(content!=="zs") { %> <Content><![CDATA[<%= content %>]]></Content> <% } else { %> <Content>欢迎来到报名图书馆暑假工! 报名步骤: ①将招聘推文转发至朋友圈或者40人以上的群,让更多同学了解本招聘。为招聘方宣传以找到更多优质学生员工。 →<a href="http://a.xiumi.us/board/v5/29Ndm/47380885">点此进入招聘推文</a> ②回复你的资料:报名 姓名 电话号码 深圳哪个区 可上班时间 </Content> <% }} else if (msgType === 'zs') { %> <Content><a href="http://www.baidu.com/?k381740148">ddwadwada</a></Content> <% } else if (msgType === 'image') { %> <Image> <MediaId><![CDATA[<%= content.mediaId %>]]></MediaId> </Image> ... </xml>

由这个问题,我们想到web开发中还有一些类似的“乱码”,这些乱码又有哪些规律呢?

字符实体

字符实体是XML和HTML中的字符编码方式,也就是上面事例中提到的,格式为:

& 实体名称 ; & (# Unicode编码) ;

实体名称一般是有意义的词,方便大家记忆,比如小于号<的实体名称是lt,也就是less than的缩写。只有部分符号是有实体名称的,使用unicode编码是更通用的写法。

像文字类一般不会采用这种编码方式,主要用于在HTML或XML文档中输出一些保留字符和空格,比如我想在HTML中展示一段html代码就需要使用字符实体

比如我们要展示`<p>情深深雨蒙蒙</p>` 以下两种表示是等效的 ​ <pre> <p>情深深雨蒙蒙</p> <p>情深深雨蒙蒙</p> </pre>

总而言之,字符实体是HTML和XML中的编码方式,比如在HTML文档中写入:我,那么最终页面上看到的是我这个汉字。

unicode字符

编程语言中的unicode字符的格式为:

\u 16进制unicode编码

绝大多数编程语言,包括CSS中都支持unicode字符,不过HTML和XML是不支持的。那么什么时候使用unicode字符呢?一般来说有两种场景:

  1. 避免文件保存时采用不同编码导致的乱码,因为\u已经声明了是unicode。
  2. 正则匹配中的一些应用:Unicode编码及在正则表达式中的使用

在JS中可以使用charCodeAt()获取字符串的10进制unicode编码

URL编码

类似我这样的,叫做URL编码,在链接的参数里非常常见

网络标准RFC 1738做了硬性规定:

“只有字母和数字[0-9a-zA-Z]、一些特殊符号”$-_. !*'(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。”

所以像汉字,空格这些都必须经过转码。上面讲的unicode字符,字符实体用的都是unicode编号,而URL编码用的则是utf-8, 规则是将utf-8编码每隔两个字符加一个%

UTF 是英文 Unicode Transformation Format 的缩写,意为把 Unicode 字符转换为某种格式。unicode和utf-8并不是同一种东西,但是又存在着unicode是信源编码,对字符集数字化; utf-8,utf-16这些是信道编码,为更好的存储和传输。

简单说,unicode就是一组数字,每一个数字对应一个字符。utf-8就是对字符的传输和保存时的规则。比如说“我”这个字,unicode码(16进制)是6211,utf-8是E68891, 那么对应的URL编码就是我;

{ Unicode编码: 0x6211, UTF8编码: E68891, UTF16编码: FEFF6211, UTF32编码: 0000FEFF00006211 URL编码: 我 }

更多细节可以参考《阮一峰:关于URL编码》

总结

Web开发中常见的几种乱码包括:Unicode字符、字符实体、URL编码。如以下情况都表示“我”

Unicode字符: \u6211 字符实体编号(16进制):我 字符实体编号(10进制):我 URL编码:我

这些编码规则的本质都是一些特殊符号 Unicode编码 所组成。

希望本文能帮助到您!

点赞 转发,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓-_-)

关注 {我},享受文章首发体验!

每周重点攻克一个前端技术难点。更多精彩前端内容私信 我 回复“教程”

原文链接:http://eux.baidu.com/blog/fe/web开发中常见的乱码

作者: 郑佳润

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页