《求:javascript中utf-8转码gbk后的长度》引起的思考 (正在编写)

编写一篇满意的文章,需要不停琢磨,耗时良久。
本文正在编写中,可参考本文中的链接,本文内容杂乱,可先掠过
之所以不放草稿箱,是为了激励自己以通俗语言早日编写完此文.

这些都是我自己的理解,最好还是参考一下百度百科和维基百科,在我查找相关资料的过程中,发现有一些解释说的是是而非,对也对,错也错,尽信书不如无书

本文目标:

  • 在前端把utf-8转码为gbk或者gb18030 (已实现)
  • 求出所转后字节的长度(已实现)
  • 都有什么工具可查看字符的各种编码和长度(已实现)
  • form的accetpcharset到底有什么属性?iso、gbk、utf-8?(已实现)

工具、概念

好文!!!: utf8和gb18030的区别
强烈建议使用:本文作者写的解码页面----(https://1078559858.github.io/makeWheels/project/encode/encode.html)

gb2312\gbk\gb18030 在线转换
utf8\unicode\utf16\utf32 在线转换
unicode、iso编码的历史
unicode详解

好文!
Unicode和UTF的关系
IBM:Unicode 字符编码
Unicode(UTF-8, UTF-16)令人混淆的概念

阮一峰

前言

ascii

unicode

  • unicode是一种编码格式,对世界上每一个字符都设置了对应的编码。
  • unicode的默认编码格式是utf-16,传输比较浪费空间,所以现在用utf8的比较多
  • GB18030 是中国的标准,国标(GB),就是如何表示一个字符。Unicode只给出了一个字符的编号,并没有规定如何表示(或者说保存),UTF-8规定了如何表示。所以说,GB18030 和 unicode+utf-8 是不同的字符表示方式,一个是中国制定的标准,一个是国际上的组织制定的标准

ascii和 unicode的关系

  • ascii只有127个字母,为了兼容中文有了gb2312,那日文、韩文呢?要统一世界语言,就有了unicode编码
  • unicode编码表示英文是八位,而ascii是7位,空间变大一倍。于是有了utf-8可伸缩长度的编码

ascii和iso 8895的关系

  • ascii是7位字符集,iso 8895是一系列8位元字符集的标准,现时定义了15个 字符集:ios 8895-1、ios 8895-2…。
  • iso 8895的15个字符集都是八位字符集,利用了ascii的最高位第八位,因此,都完全兼容ascii
  • iso 8895可以理解为是为了一些特殊国家字符集而设立的,比如东欧是:iso 8895-1、中欧是iso 8895-2等。
  • iso 8895-1, 也叫Latin-1,它是比较常见和重要的, 因为比ascii编码集更广,所以一些软件设置为默认字符集。
  • iso 8895工作组已解散,目前全力维护iso 10646
  • ISO-8859-1对应于ISO/IEC 10646即Unicode的前256个码位。

ascii和gb的关系

  • 在ascii基础上,发展了用于处理简体的gb2312,处理繁体的big5
  • gb2312字符集太少,后来发展为gbk(k是扩展的意思)

ANSI

UCS-2是什么

BOM和无BOM

unicode和utf的关系

utf8和16、32的关系

常用概念

  • unicode:
  • utf-8:1、2、3、4字节
  • gbk、gb2312: 2字节
  • gb18030: 1、2、4字节

gb2312编码

  区位码是四位的十进制数字,是GB2312国标码中的分区表示方法,区位码的前两位数是“区号”,后两位数是“位号”。区号和位号分别加上160,再分别转换成十六进制数,就成为四位的十六进制GB2312国家标准编码(简称国标码)。
  区位码把GB2312字符集分为94个区,每区含有94个位,共8836个码位,其中部分码位未安排字符

字符 区位号 GB2312 GBK GB18030 unicode utf8 utf16 utf32
1601 B0A1 0000554A E5958A FEFF554A 0000FEFF0000554A
  • GB2312编码方案于1980年发布,收录汉字6763个,采用双字节编码。
  • GBK编码方案于1995年发布,收录汉字21003个,采用双字节编码。
  • GB18030编码方案于2000年发布第一版,收录汉字27533个;2005年发布第二版,收录汉字70000余个,以及多种少数民族文字。GB18030采用单字节、双字节、四字节分段编码。
平台 项目中使用的编码格式
web前端 utf-8
oracle gb18030
mongo utf-8
字符集 字符种类 字符数量 汉字所占长度
gbk 简体中文、繁体中文、日语韩语等
gb2312 简体中文 2字节
gb18030 简体中文 1、2、4字节
utf-8 2、3、4字节

概念:各种编码的区别
字符系列: 有详细代码,讲解比较详细
有hack方法,有对比,有详解

前端浏览器不支持gbk,因为用的少。

utf-8转GBK

1. form方法

代码实现
方法比较古老,使用form表单的chartset方法
缺点:

  • 对ie需要适配
  • 不支持gb18030
  • 对于gbk,也需要服务器支持,不然报uri错误
  • 额外的代码侵入

优点:

  • 效率高
  • 容易移植

总结:不推荐。

2.正则方法

缺点:

  • 只能笼统的判断汉字,对于特殊汉字及字符需要额外判断。比较麻烦

优点:

  • 代码最少
  • 虽然麻烦,但是写好规则以后,移植也是最方便的

总结:不推荐

3.映射表方法

github仓库地址:text-encoding
优点:

  • 完成大部分功能,并且支持GB18030等偏僻的字符集
  • 字符集与数据库字符集一致,不用对特殊字符和汉字额外判断

缺点:

  • 覆盖了window的TextEncoder和TextDecoder函数
  • 前端代码过大,即便压缩后,也有190KB的映射表代码。(上面git仓库里面的代码我去掉了多余部分,只要压缩就可得到190KB的代码)

总结:推荐

4.自己实现和mdn方法

5.nodejs
iconv-lite库

猜你喜欢

转载自blog.csdn.net/a519991963/article/details/97368101