一种安全、简便的UTF-8和GBK编码的数据转换方法

王志勇 发表于 2013年04月16日 09:06

我最近需要混合处理UTF-8和GBK/或GB2312编码。编写UTF-8和GBK编码互相转换的程序是比较麻烦的,昨天无意中发现一个方法,就是借助于JavaScript+iframe框架。例如父框架页的编码可以是GBK,子框架页的编码可以是UTF-8(反之同理),当父框架页和子框架页互相赋值的时候,完全不用转换编码,而不产生乱码。利用这个原理,可以做很多特殊的处理,简化了大量的步骤,在IE和Firefox浏览器下测试成功。

例如在GBK/或GB2312编码模式下,要对相应的UTF-8页的数据进行处理,这时候通过JavaScript+iframe框架就能达意想不到的效果。利用这个原理,也可以把整站的文件批量在UTF-8和GBK/或GB2312编码中互换。但它唯一的缺点是,只能是父框架页和子框架页之间互相赋值,这时必须做一个数据提交的程序,才能转换编码,也就是说,在自动赋值之后,需要鼠标点击一下进行提交才能实现对要写入的数据进行编码转换。这个缺点,可以用JavaScript的submit()函数实现自动提交。以PHP为例,写入数据的编码格式,是取决于<meta>标签里声明的charset。

由于时间的关系,就不做具体的实例了,因为做一个具体的实例要花费很多的时间,重要的步骤一是使用iframe标签嵌入一个子框架页,子框架页的编码与父框架页的编码不同。重要的步骤二是必须掌握父框架页和子框架页互相赋值的方法,子框架页给父框架页赋值的方法比较简单,就是top.***.innerHTML,或者是top.***.value,方法和在同一页赋值的方法一样,只是多了一个top加点儿。

相反的,父框架页给子框架页赋值,就复杂很多,昨天测试了一下午才成功。父框架页给子框架页赋值,写直接赋值的命名语句不给赋值,必须建立自定义函数才能赋值。网上几乎没有这个直接赋值的方法,我找了很久都没找到,网上的方法是需要通过鼠标点击触发事件,才能赋值,可以在Google或百度搜索“iframe 赋值”。我把它改成<body onload=abc();>,最后完美地成功了。这个abc()自定义函数为:function abc(){document.frames['aac'].document.all.da.value="赋值";}。说明:这里的aac代表的是iframe里的name=。后面的document.all.da.value,其中da是子框架页里一个表单框的名字,这里必须写为document.all.da.value,document.all不能省略,否则不给赋值。如果子框架页里的表单da所在的form有名称,例如<form method=post name=ag>,那么这个abc()也可以写为:function abc(){document.frames['aac'].ag.da.value="赋值";}。

本文是提供一种重要的方法,2个重要的步骤,希望读者能够熟练掌握这个方法。要熟练掌握,可能至少要花一天时间做测试。这个方法,在大型或者小型的程序里,在必要的时候能够发挥重要的作用。特别是在一个混合编码的网站,这是一种极好的方法。没有更具体的代码了,上述的步骤已经写得很清楚了。当然,如果万一出现赋值时出现乱码,就可以通过复制、粘贴、提交来转换编码。例如百度的网站,就是成功地使用UTF-8和GBK两种编码,而没有产生乱码。

我在前面的文章写过,中文如果使用GB2312或GBK编码,可以节省很多字节。而英文的编码,无论是UTF-8还是GBK,字节数量都是一样的,韩文则必须使用UTF-8编码。这是因为,在UTF-8编码下,中文汉字、英文字母、韩文单字所占的字节分别为:3、1、3;在GB2312或编码GBK下,中文汉字、英文字母、韩文单字所占的字节分别为:2、1、8。在GB2312或编码GBK下,文本格式为ANSI,ANSI文件格式无法保存韩文或全角的Unicode码,字符会被转化成&#54620;&#44397;&#50612;的形式(한국어)。

0条评论:

发表评论:
名字: (*必填)
博客: (可省,仅限于Blog地址)
验证码: p48u58r68e78 (*必填)

正文:

  记住信息?

直接发送Trackback到此文章

说明:本评论系统不支持HTML代码。(您的留言需要审核,审核规则请见这里。)

文章分类 Category:
真相与UFO Truth and UFO
编程 Program
PHP
Blog的发展 Development
为什么写博客 W-do we Blog
互联网 Internet
BBS社区研究 Community
QQ研究 QQ Research

置顶的文章:
程序开发的门槛儿
为什么不能夸孩子调皮?
我的3种博客写作方法
最大的公益事业是UFO
再谈四维空间
开发文档和程序注释
Arsue Blog程序的扩展
独立微博开发之设想

近期的主题:
2017.7第2篇
auiou.com今天换上了KVM
CentOS, Debian, Ubuntu三种VPS系统的LAMP属性小结
Debian 6.0和Ubuntu 14.04新装机的参数记录
Linux VPS的速度优化
Nginx与.htaccess
CentOS 6新装机的参数记录
auiou.com的VPS的内存占用测试
2016年8月第一帖
不喜欢锻炼身体的朋友
看《第五空间》
看《爱情公寓》的一点感想
生命的意义在于每一天都是人生的开始
安卓机顶盒收到小记
人生中最可怕的事情是拖延
不能贪吃/不能贪喝/不能贪凉
“世面”和人生意义
计划推出一个重要的“网络存档”(网络记事本)快速小程序
最近几个月博客更新减缓的原因
汽车越来越多
编写完成了清爽的贴吧浏览程序/贴吧占用内存测试
猫/无线路由器/瑞银无线网卡 最简单有效的散热方法
最近录制的歌
家用无线路由器选购的一些建议
网络电视机顶盒选购的一些建议
无线路由器当作无线交换机实例
2013-08-08:人生的意义&谨言慎行
怎样对治重症的拖沓的毛病?
磊科NW336无线网卡使用感受
腾达311R无线路由器频繁掉线解决一例(其它品牌和型号可能也适用)
网络电视杰科T1使用感受(杰科T1/T2/T3怎么样?)
人为什么会无聊?无聊的时候该做什么?
2013-07-14:看不见的全息摄像机
想法:2013-07-12
有趣的植物3:景天科多肉植物
有趣的植物2:米邦塔食用仙人掌
最有趣的植物
想法:2013-06-30
好好地修心
中国现代和未来的黑人问题/广州黑人
KVM主机竟然死机
想法:2013-06-13
行人的过错
为什么不能夸孩子调皮?/怎样教出一个好孩子?
打招呼的一瞬间
欢迎哥们儿们加我的QQ
好心一定会有好报
拜金女的下场都是不好的
最近很忙,写作的思路断了
狂做好事,消除烦恼
最大的公益事业是UFO/怎样做UFO研究?
  

王志勇:程序设计者。
1980-09-26 (38周岁)

版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。

与此相关的链接
自由勇专栏 | Arsue官方Blog
Gratitude | Time | Auciou
matnue | aucist | Taimt | Caimt | ac315 | Arsue | IC Search | TDNote 帖笛 | HKANS | aroat | Vaimt Panel | txfor | 网树 | cdfor | aufirm | Emxel | ixnes | AnyDiary | Tuarm | Tovate | Urtal | coumit | cersta | tratom | 性格追踪仪54.81.196.35 2018-08-19_13:23

Blog存档 Archives

2013年08月(9)
2013年07月(6)
2013年06月(7)
2013年05月(22)
2013年04月(17)
2013年03月(20)
2013年02月(21)
2013年01月(6)
2012年12月(3)
2012年08月(8)
2012年07月(4)
2012年06月(4)
2012年05月(6)
2012年04月(13)
2012年03月(11)
2012年01月(7)
2011年10月(8)
2011年09月(4)
2011年08月(2)
2011年06月(2)
2011年05月(6)
2011年04月(10)
2011年03月(16)
2011年02月(16)
2011年01月(15)
2010年12月(12)
2010年11月(9)
2010年10月(3)
2010年05月(4)
2010年01月(7)
2009年12月(10)
2009年11月(4)
2009年10月(8)
2009年09月(24)
2009年08月(20)
2009年07月(6)
2009年06月(11)
2009年05月(16)
2009年04月(20)
2009年03月(29)
2009年02月(18)
2009年01月(15)
2008年12月(17)
2008年11月(10)
2008年10月(13)
2008年09月(8)
2008年08月(4)
2008年07月(5)
2008年06月(9)
2008年05月(12)
2008年04月(15)
2008年03月(26)
2008年02月(22)
2008年01月(29)
2007年12月(30)
2007年11月(28)
2007年10月(30)
2007年09月(8)
2007年08月(8)
2007年07月(21)
2007年06月(23)
2007年05月(31)
2007年04月(34)
2007年03月(29)
2007年02月(18)
2007年01月(41)
2006年12月(23)
2006年11月(10)
2006年10月(10)
2006年09月(29)
2006年08月(33)
2006年07月(17)
2006年06月(30)
2006年05月(4)
2006年01月(3)
2005年09月(4)


Copyright © 2006-2018 auiou.com All rights reserved.
此Blog程序由王志勇编写 已经发布在Arsue