utf-16转换至utf-8相关知识及golang实现总结

栏目: Go · 发布时间: 5年前

内容简介:BOM(Byte Order Mark)既字节序标记,一般是出现在以Unicode编码的文件开始的头部。带BOM的Unicode编码文件查看其二进制编码会出现以下数据,下面只是一些常用的字符编码golang中的转换实现参考utf-16 在做转换时不能忽视该编码的大端序和小端序区别,不然将会导致乱码,转换使用到包

BOM(Byte Order Mark)既字节序标记,一般是出现在以Unicode编码的文件开始的头部。带BOM的Unicode编码文件查看其二进制编码会出现以下数据,下面只是一些常用的字符编码

字符编码 Bom (十六进制)
UTF-8 EF BB BF
UTF-16 (BE) 大端序 FE FF
UTF-16 (LE) 小端序 FF FE
UTF-32 (BE) 大端序 00 00 FE FF
UTF-32 (LE) 小端序 FF FE 00 00
GB-18030 84 31 95 33

Unicode编码简介

  • Unicode是容纳世界所有文字符号的国际标准编码,使用四个字节为每个字符编码。

  • UTF是英文 Unicode Transformation Format 的缩写,意为把 Unicode 字符转换为某种格式。UTF 系列编码方案(UTF-8、UTF-16、UTF-32)均是由 Unicode 编码方案衍变而来,以适应不同的数据存储或传递,它们都可以完全表示 Unicode 标准中的所有字符。目前,这些衍变方案中 UTF-8 被广泛使用,而 UTF-16 和 UTF-32 则很少被使用。

  • UTF-8使用一至四个字节为每个字符编码,其中大部分汉字采用三个字节编码,少量不常用汉字采用四个字节编码。因为 UTF-8 是可变长度的编码方式,相对于 Unicode 编码可以减少存储占用的空间,所以被广泛使用。

  • UTF-16使用二或四个字节为每个字符编码,其中大部分汉字采用两个字节编码,少量不常用汉字采用四个字节编码。UTF-16 编码有大端序和小端序之别,即 UTF-16BE 和 UTF-16LE,在编码前会放置一个 U+FEFF 或 U+FFFE(UTF-16BE 以 FEFF 代表,UTF-16LE 以 FFFE 代表),其中 U+FEFF 字符在 Unicode 中代表的意义是 ZERO WIDTH NO-BREAK SPACE,顾名思义,它是个没有宽度也没有断字的空白。

  • UTF-32使用四个字节为每个字符编码,使得 UTF-32 占用空间通常会是其它编码的二到四倍。UTF-32 与 UTF-16 一样有大端序和小端序之别,编码前会放置 U+0000FEFF 或 U+0000FFFE 以区分。

大端序和小端序

  • 大端:大端就是内存中的低位地址存放对应整数的高位。
  • 小端:小端就是内存中的低位地址存放对应整数的低位。
字节数组:[0 1 2]

按照大端序转换成二进制为:
0 0 0 0 0 0 0 0 | 0 0 0 0 0 0 0 1 | 0 0 0 0 0 0 1 0

按照小端序转换成二进制为:
0 0 0 0 0 0 1 0 | 0 0 0 0 0 0 0 1 | 0 0 0 0 0 0 0 0

所以字节数组[0 1 2]大端序十进制为:258,小端序为:131328
复制代码

golang中的转换实现参考 binary

golang 转换utf-16编码至utf-8

utf-16 在做转换时不能忽视该编码的大端序和小端序区别,不然将会导致乱码,转换使用到包 golang.org/x/text/encoding/unicode

bs := [8]byte{93, 78, 95, 134, 75, 144, 26, 144}
decoder := unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM).NewDecoder()
bs2, err := decoder.Bytes(bs[:])
fmt.Println(string(bs2), err)
复制代码

output...

九號運通 <nil>
复制代码

unicode.LittleEndian 指定为小端序

unicode.IgnoreBOM 忽略BOM标记

参考链接:


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新者的处方

创新者的处方

[美]克莱顿·克里斯坦森、杰罗姆·格罗斯曼、黄捷升 / 朱恒鹏、张琦 / 中国人民大学出版社 / 2015-9 / 89.90元

[内容简介] ● 创新大师克里斯坦森采用了哈佛商学院在20年研究中总结而出的、在各行业实践中获得成功的管理创新经验,把颠覆式创新理念引入美国医疗行业研究。医疗机构需要量体裁衣,选择合适的商业模式展开创新之举。 ● 作者同时探讨了医疗保险公司、制药企业、医学院和政府机构在医疗改革中起到的作用,从社会性角度深入剖析了医疗保健行业未来之路。 ● 医疗界人士、政策制定者、对医疗界现......一起来看看 《创新者的处方》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具