文章目录

  • 前言
  • 一、UTF-8、GBK、GB2312、Unicode
  • 二、转换原理
    • 1.背景
    • 2.UTF-8编码规则
  • 总结

前言

遇到UTF-8和GBK互转问题,稍微记录一下重点~


一、UTF-8、GBK、GB2312、Unicode

GBK:《汉字内码扩展规范》。简体繁体均支持。
GB2312:《信息交换用的汉字字符集编码》。简体,GBK的未拓展版本。
Unicode:Union code,统一码,是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。大而全。
UTF-8:针对Unicode设计的可变长编码,互联网常用编码方式。

二、转换原理

1.背景

GBK、GB2312等与UTF8之间必须通过Unicode编码才能相互转换,所以我们可以看到,在网上找到的非库函数的代码,均需依赖一个Unicode的字库作为转换的支撑。

2.UTF-8编码规则

基于这个背景,我们再了解一下UTF-8的编码规则:

  1. 对于单字节的符号, 字节的第一位设为0, 后面7位为这个符号的unicode码. 因此对于英语字母, UTF-8编码和ASCII码是相同的.

  2. 对于n字节的符号(n>1), 第一个字节的前n位都设为1, 第n+1位设为0, 后面字节的前两位一律设为10. 剩下的没有提及的二进制位, 全部为这个符号的unicode码.

Unicode符号范围(十六进制) UTF-8编码方式(二进制)
0000 0000 - 0000 007F 0xxxxxxx
0000 0080 - 0000 07FF 110xxxxx 10xxxxxx
0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000 - 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
0020 0000 - 03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
0400 0000 - 7FFF FFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

因此,从Unicode转换为UTF-8的主要原理就是:1.判断是否为ASCII码,如果是ASCII码则无需转换;2.如果不是ASCII码,判断当前字符Unicode符号的值处于哪个范围区间,并根据这个区间进行相应的移位和 | 运算操作,最后算出相应的UTF-8的值.
UTF-8转换为Unicode也是类似道理,就不细说了.


总结

简单总结了一下,实际实现过程中可能会遇到大小端的问题。

附一个网址查编码转换:http://www.mytju.com/classcode/tools/encode_utf8.asp

UTF-8和GBK互转问题相关推荐

  1. 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   普通的linux 和 普通的windows.    ...

  2. java锟斤拷锟斤拷锟_锟斤拷?UTF-8与GBK互转乱码问题

    作为一名程序员,肯定有被乱码困扰的时候,真到了百思不得其解的时候,就会觉得:英文程序员真幸福. 但其实只要明白编码之间的转换规律,其实乱码so easy~ 我们知道,计算机存储数据都是2进制,就是0和 ...

  3. 【微信小游戏】CocosCreator做小游戏 — 字符串编码转换(UTF-8和GBK互转)

    问题描述:项目中服务端使用的GBK编码,中文字符串传输到客户端后,需要转换成UTF-8编码才能正常显示. 方法一:使用TextDecoder方法 // 先在buffer中取strlen长度的数据,是G ...

  4. VC,CString,UTF8与GBK互转

    转自:http://blog.csdn.net/segen_jaa/article/details/6447874/ 解决CString因编码显示中文乱码的问题和中文转UTF8编码 UTF8转GBK ...

  5. python编码类型互转总结

    1.只有在unicode下才能将utf-8与gbk互转 2.unicode是在内存中使用,bytes是文件存储和网络传输时使用 py3时: a="中国" 和a=u"中国& ...

  6. 编码标准-GB2312 GBK GB18030

    关于 ASCII编码 可以查看我的另外一篇博客 编码标准-ASCII 关于 Unicode 可以参考我的另外一篇博客 Unicode 编码标准-GB2312 GBK GB18030 基本概念 区位码 ...

  7. 嵌入式汉字显示原理及GBK编码详解

    嵌入式汉字显示原理及GBK编码详解 ~~~~~~~~        关于各个编码的介绍和转换可以看我的另一篇博客:[C语言实现]十六进制面值转字符串.字符面值转十六进制.UNICODE与GBK互转,U ...

  8. html js中英切换,使用js实现URL中的中英文转化 - 小俊学习网

    一个现象,从浏览器地址栏复制网址,http://www.baidu.com/s?wd=格娜小屋,就是这样的,http://www.baidu.com/s?wd=%E6%A0%BC%E5%A8%9C%E ...

  9. python基础知识练习题

    1.执行Python脚本的两种方式 1.在计算机终端(运行cmd),输入安装的Python路径,然后输入Python脚本的路径,回车. 2.直接运行python 2.简述位.字节的关系. 1字节 = ...

最新文章

  1. B. 熟练剖分(tree) (概率DP)
  2. Leetcode 124题:求⼆叉树中最⼤路径和
  3. html调用chr,PHP: 使用chr打印汉字
  4. Java知识整理——异常处理
  5. python微博热点_用 Python 监控知乎和微博的热门话题
  6. springboot+mybatis集成自定义缓存ehcache用法笔记
  7. java整型和浮点型_Java基本的程序结构设计 整形和浮点型
  8. mysql 默认page大小_Innodb优化之修改页大小
  9. 4 微信公众号开发 被动回复消息 回复没有反应怎么办
  10. 计算机专业术语全称及含义整理
  11. 【链表】删除链表的倒数第n个节点
  12. Android ListView上拉获取下一页
  13. 《细说PHP》分页源代码
  14. android常用刷机指令,【高级技术】Android刷机常用adb指令集合
  15. JAVA 滑块拼图验证码
  16. android webview 广告过滤,使用webView屏蔽广告(实操版)
  17. ORB-SLAM2学习笔记——BundleAdjustment函数
  18. 解读72篇DeepMind深度强化学习论文
  19. xcode6 关于iphone6、iphone6plus适配(一)
  20. ae稳定不能获取动态服务器,ae 获取动态链接服务器超时

热门文章

  1. Jmeter接口测试实战(一):Jmeter将测试结果写入到Excel中
  2. RGBA颜色与兼容性的半透明背景色
  3. UEFI qemu环境搭建
  4. 谈谈我对众筹的一些认识
  5. NLP——Information Extraction信息提取
  6. 可编程电源输出过冲怎么办?解决方案在这里
  7. 统计学习与方法实战——统计学习方法概论
  8. iOS实现微信第三方登录
  9. 大专的计算机专业要学高数吗,普通本、专科“数学”不好,3个专业不建议报,“没出路”!...
  10. 【Netty】五、Netty实现Http服务器