前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符集及其存储方式(解决乱码问题)

字符集及其存储方式(解决乱码问题)

作者头像
zenRRan
发布2018-04-13 17:09:21
1.2K0
发布2018-04-13 17:09:21
举报

阅读大概需要4分钟

在我们进行文本挖掘或处理文档时,都要面临一个最最基本的问题->就是解决乱码问题。在此,介绍最本质的字符编码。

我们熟悉的有三种:ASCII字符集,中文字符集(GBK),Unicode字符集

ASCII字符集

故事:

美国信息交换标准代码,这是计算机上最早使用的通用的编码方案。那个时候计算机还只是拉丁文字的专利,根本没有想到现在计算机的发展势头,如果想到了,可能一开始就会使用unicode了。当时绝大部分专家都认为,要用计算机,必须熟练掌握英文。这种编码占用7个Bit,在计算机中占用一个字节,8位,最高位没用,通讯的时候有时用作奇偶校验位。因此ASCII编码的取值范围实际上是:0x00-0x7f,只能表示128个字符。后来发现128个不太够用,做了扩展,叫做ASCII扩展编码,用足八位,取值范围变成:0x00-0xff,能表示256个字符。其实这种扩展意义不大,因为256个字符表示一些非拉丁文字远远不够,但是表示拉丁文字,又用不完。所以扩展的意义还是为了下面的ANSI编码服务。

- 单字节存储

用一个字节(8位)来表示字符

共2^7=128个字符

字符集:规则的集合

字符 -> 字符对应的二进制数字

存储方式:

字符对应的二进制数字 -> 实际存储数值

中文字符集

GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification) ,中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司、电子工业部科技与质量监督司1995年12月15日联合以技监标函1995 229号文件的形式,将它确定为技术规范指导性文件。这一版的GBK规范为1.0版。

产生原因:ASCII 字符集无法表示中文

GBK等汉字编码:

多字节存储,兼容ASCII, 存储方式:EUC4-CN

高位为1的字节,表示其是一个双字节二进制码

Unicode

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。

支持世界上几乎所有字符的字符集

表示范围:0000 ~ 10FFFF、 100多万个符号

存储方式:UTF-8, UTF-16, UTF-32

UTF-8:

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到4个字节编码Unicode字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

变长存储: 使用1~4个字节。

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

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

很明显,在C++中为了解决是汉字还是字母的问题上,判断其二进制首位即可。而java则不用,有直接扫描字符的函数。(还有同学问了,那为啥要用C++...a simple reason 嘛,C++快

再举个实例:

OK,回归主题:乱码?

例如:UTF-8存储方式的文件,用GBK方式读取 or GBK存储方式的文件,用UTF-8方式读取 就会产生乱码

ANSI - Windows中默认的字符集

这个还得了解!

在你在windows 下保存一个文本时,默认的第一个保存方式就是这个东东。

在中文Windows操作系统中:

对于英文文件是ASCII字符集。

对于简体中文文件是GB2312字符集。

繁体中文版会采用Big5字符集。

在日文Windows操作系统中:

对于英文字符是ASCII字符集。

对于日文字符是Shift_JIS。

不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。

参考潘达师兄ppt

每日托福单词

consensus n. 一致意见,共识

stereotype n. 思维定势 v. 刻板地对待

larva n.幼虫

vague adj. 含糊的,不明确的

saint n. 圣徒,圣人

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习自然语言处理 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档