UTF-8和GBK互转问题
文章目录
- 前言
- 一、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的编码规则:
对于单字节的符号, 字节的第一位设为0, 后面7位为这个符号的unicode码. 因此对于英语字母, UTF-8编码和ASCII码是相同的.
对于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互转问题相关推荐
- 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 普通的linux 和 普通的windows. ...
- java锟斤拷锟斤拷锟_锟斤拷?UTF-8与GBK互转乱码问题
作为一名程序员,肯定有被乱码困扰的时候,真到了百思不得其解的时候,就会觉得:英文程序员真幸福. 但其实只要明白编码之间的转换规律,其实乱码so easy~ 我们知道,计算机存储数据都是2进制,就是0和 ...
- 【微信小游戏】CocosCreator做小游戏 — 字符串编码转换(UTF-8和GBK互转)
问题描述:项目中服务端使用的GBK编码,中文字符串传输到客户端后,需要转换成UTF-8编码才能正常显示. 方法一:使用TextDecoder方法 // 先在buffer中取strlen长度的数据,是G ...
- VC,CString,UTF8与GBK互转
转自:http://blog.csdn.net/segen_jaa/article/details/6447874/ 解决CString因编码显示中文乱码的问题和中文转UTF8编码 UTF8转GBK ...
- python编码类型互转总结
1.只有在unicode下才能将utf-8与gbk互转 2.unicode是在内存中使用,bytes是文件存储和网络传输时使用 py3时: a="中国" 和a=u"中国& ...
- 编码标准-GB2312 GBK GB18030
关于 ASCII编码 可以查看我的另外一篇博客 编码标准-ASCII 关于 Unicode 可以参考我的另外一篇博客 Unicode 编码标准-GB2312 GBK GB18030 基本概念 区位码 ...
- 嵌入式汉字显示原理及GBK编码详解
嵌入式汉字显示原理及GBK编码详解 ~~~~~~~~ 关于各个编码的介绍和转换可以看我的另一篇博客:[C语言实现]十六进制面值转字符串.字符面值转十六进制.UNICODE与GBK互转,U ...
- html js中英切换,使用js实现URL中的中英文转化 - 小俊学习网
一个现象,从浏览器地址栏复制网址,http://www.baidu.com/s?wd=格娜小屋,就是这样的,http://www.baidu.com/s?wd=%E6%A0%BC%E5%A8%9C%E ...
- python基础知识练习题
1.执行Python脚本的两种方式 1.在计算机终端(运行cmd),输入安装的Python路径,然后输入Python脚本的路径,回车. 2.直接运行python 2.简述位.字节的关系. 1字节 = ...
最新文章
- B. 熟练剖分(tree) (概率DP)
- Leetcode 124题:求⼆叉树中最⼤路径和
- html调用chr,PHP: 使用chr打印汉字
- Java知识整理——异常处理
- python微博热点_用 Python 监控知乎和微博的热门话题
- springboot+mybatis集成自定义缓存ehcache用法笔记
- java整型和浮点型_Java基本的程序结构设计 整形和浮点型
- mysql 默认page大小_Innodb优化之修改页大小
- 4 微信公众号开发 被动回复消息 回复没有反应怎么办
- 计算机专业术语全称及含义整理
- 【链表】删除链表的倒数第n个节点
- Android ListView上拉获取下一页
- 《细说PHP》分页源代码
- android常用刷机指令,【高级技术】Android刷机常用adb指令集合
- JAVA 滑块拼图验证码
- android webview 广告过滤,使用webView屏蔽广告(实操版)
- ORB-SLAM2学习笔记——BundleAdjustment函数
- 解读72篇DeepMind深度强化学习论文
- xcode6 关于iphone6、iphone6plus适配(一)
- ae稳定不能获取动态服务器,ae 获取动态链接服务器超时
热门文章
- Jmeter接口测试实战(一):Jmeter将测试结果写入到Excel中
- RGBA颜色与兼容性的半透明背景色
- UEFI qemu环境搭建
- 谈谈我对众筹的一些认识
- NLP——Information Extraction信息提取
- 可编程电源输出过冲怎么办?解决方案在这里
- 统计学习与方法实战——统计学习方法概论
- iOS实现微信第三方登录
- 大专的计算机专业要学高数吗,普通本、专科“数学”不好,3个专业不建议报,“没出路”!...
- 【Netty】五、Netty实现Http服务器