ansi编码_帮你彻底弄懂常见的中文字符编码

本文介绍了字符编码的作用,详细阐述了ASCII、GB2312、GBK、GB18030以及UTF8等编码之间的关系。重点讨论了各编码在兼容性和使用场景上的特点,尤其是GBK和GB18030在处理中文字符时的差异。通过对比,解释了为何在实际应用中GBK更为常见,而GB18030尽管包含更多字符,但使用较少。
摘要由CSDN通过智能技术生成
| 导语  本文主要介绍了业务中常见的ASCII、GB2312、GBK、GB18030、UTF8、ANSI、Latin1中文编码。如果你在业务中也曾经被乱码搞晕过,不妨我们一起探究一下。 PS:文末有今天儿童节粉丝福利活动哦! 最近我的业务中涉及到了包含中文文本的内容解析。业务场景是用户上传一个包含中文的文本文件,我们需要根据约定好的字段格式解析该文本,并将内容导入到数据库中。但用户所传上来的文件中文编码经常会不一样,于是我们的数据库中经常会有乱码出现。为了解决该问题,就有了这篇文章……

1、字符编码要做什么事情?

在计算机眼里读到的所有文字都是由0和1组成的字符串,为了能让汉字正常显示在屏幕上,我们需要做以下两件事情: 【1】给所有的汉字一个独一无二的数字编号,做一个数字编号到汉字的mapping关系(即字符集)
【2】把这个数字编号能用0和1表示出来 这里需要说明的是,第【2】件事情并不是直接把数字编号用二进制表示出来那么简单,还要处理多个字连在一起的时候如何做分隔的问题。例如如果我把”腾”编为1号(二进制00000001,占1byte),把“讯”编为5号(二进制00000101,占1byte),汉字这么多,一定还有一个汉字被编为了133号(二进制00000001 00000101,占2bytes)。那么现在问题来了,当计算机读到00000001 00000101这一串的时候,它应该显示“腾讯”两个字还是显示那一个133号的文字?因此如何做分隔也是字符编码需要考虑的事情。 第【2】件事情通常解决方案要么就是规定好每个字长度(例如所有文字都是2bytes,不够的前面用0补齐),要么就是在用0和1表示的时候,不仅需要表示出数字编码,还要暗示给计算机接下来多少个连续byte构成一个字,这个后面UTF8编码中会提到。 我们通常所说的Unicode,其实只做了第【1】件事情,并且是给全世界所有语言的所有文字或字母一个独一无二的数字编码,这样只要设计一种机制做第【2】件事情来表示Unicode,就可以显示全球范围内任何文字了。Unicode具体对所有语言的每个字母、文字的数字编号可以从其官方网站http://www.unicode.org/charts/ 查询。该官网一大亮点是,中文编码表的体量远远超过其他任何语言…… (为了让文章易懂,我们暂时舍弃一些晦涩概念。晦涩地讲,现代字符编码模型其实分5个层次,可以参考链接了解:http://www.unicode.org/reports/tr17/ ,不在我们讨论范围内了)

2、几种常见中文编码的关系如何?

几种常见中文编码之间存在兼容性,一图胜千言 c208036a8c46e558e687e69e4d2d1fcf.png [ 几种中文编码的兼容性 ] 所谓兼容性可以简单理解为子集,同时存在也不冲突,不会出现上文所说的不知道是“腾讯”还是133号文字的情况。图中我们可以看出,ASCII被所有编码兼容,而最常见的UTF8与GBK之间除了AS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值