- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件开发中的编码详解
黑马程序员:软件开发中的编码详解
前言?
我想,对于软件开发人员来说,“编码”这个概念一定不陌生,甚至说“经常接触”,在我们写代码的过程中,“编码问题”是一个让我们程序员无奈又头疼的问题。
“编码问题”解决起来并不难,但原理,我相信有很多程序员都是似是而非,那接下来我们就一起来探讨一下这个问题。
计算机编码?
计算机编码指电脑内部代表字母或数字的一种记录数据的方式。
为什么会出现编码?我们知道,计算机中的数据是由电子原件存储的,而因为工业技术的限制,电子元件只能记录两种稳定状态“开”和“关”,用数字来表示,就是0 和1。也就是说,本质上计算机只能记录0和1这两个数字。每个0或者1,我们称之为一个bit,是计算机最小的单位。这种只有0和1的数字,我们称之为2进制数字。
但很明显,我们需要记录的东西很多,所以只有两个数字肯定不行,于是3个bit共同来表示一位数字,就有了8进制。4个bit共同来表示一位数字,就有了16进制。
数字问题解决了,但是,如果想在计算机中存储一个字符‘a’,却无法做到。为了解决这个问题,人们就想了一种解决方法:把所有的常用的字符都统一编号,如‘a’的编号就是97,这样,当我们需要存储‘a’的时候,不直接存储‘a’,而是存储数字97,当拿出来的时候,再把这个97变成‘a’,这样就完美解决了这个问题。
而我们通常所说的“编码”就是这些字符的编号。
所有字符的和其编号对应的表格,我们称之为“编码表”。
常见的编码表:ASCII编码,GB2312编码(简体中文),GBK,BIG5编码(繁体中文),utf-8编码等
ASCII编码:
计算机在创建之初,流行于“西方世界”或者叫“英语国家”,拆开来看,西方世界的语言、文字等等,充其量也就是26个英文字母加上一些符号,即使英文字母分大小写,也绝不超过128个,每个字符使用一个字节来表示,足够了。使用一个字节来表示一个字符的这种编码方式,就是最早的:ASCII编码。
注1:字节是由8个bit组成的一个基本单位,表示的范围是:-128---127
注2:编码没有负数
注3:ASCII不支持中文。
GBK编码:
后来,随着计算机的普及,整个世界都需要使用计算机来存储数据,如果还使用ASCII编码肯定不行(无法存储罗马字母表以外的字符),而且ASCII编码所规定的一个字节表示一个字符的这种规定很明显无法适用于整个世界(汉字至少也要几千个吧)。所以,各国都对ASCII编码进行了扩充,由原来的一个字节表示一个字符,转换为多个字节表示一个字符。
例如中国的GB2312,GBK两种编码格式,都是2个字节来表示一个字符。当然两个字节所能表示的范围就大了,几乎所有的常用汉字都可以被包括了。
注:不管是什么编码,但是最初的0-127范围之内所表示的字符和ASCII编码都完全一致。
UTF-8编码:
当然,如果世界各国都使用自己的编码,那国家与国家之间的交流就比较麻烦,比如本来在你这里是赞扬的意思,到了对方那里,因为编码不同,解析出来是骂人的意思,这就不行了。所以,为了解决这个问题,由一个名为 Unicode 学术学会的组织,制订了一套编码规则-Unicode编码。该规则支持世界上超过650种语言。是一种世界通用字符规则。
UTF-8就是按照这种规则推出的一种国际性编码表。
UTF-8是国际性编码表,支持中文编码。中文在该编码表中一般占用3个字节
注1:Unicode编码并不是一种编码表,而是一种编码规则。UTF-8才是编码表,UTF-8就是根据这种规则指定出来的编码表
注2:UTF-8中的中文不全是3个字节,常用的占用3个字节,一些特殊的,非常罕见的字可能会占用6个字节。
编码问题:
开发中,所谓的“编码问题”,其实就是出现了中文乱码。为什么出现这种问题呢?
我们中国人,一般使用的都是中文的操作系统,而中文操作系统默认的编码格式是GBK。而国际上,为了全世界都能看懂,则一般使用UTF-8编码。(国际性网站一般都是UTF-8编码)
GBK编码,一个汉字一般占用2个字节。
UTF-8编码,一个汉字一般占用3个字节。
如果是:UTF-8 -- GBK
如果是:GBK -- UTF-8
解决编码问题:
“编码问题”的出现,无非是我们在解析别人给我们汉字的时候,使用的编码出错了,如果我们拿到的是GBK,就使用GBK解析,如果拿到的是UTF-8,就是使用UTF-8解析,这样不就解决了么?
所以,如果是遇到字符串出现中文乱码:
把中文乱码字符串重写打散,变为字节。
使用String的构造函数String(byte[]?bytes, String?charsetName)重组字符串。
例如: UTF-8解析
注:中文乱码只是
您可能关注的文档
- 湖北省2011年普通高校招生第一批本科录取院校平行志愿投档线.pdf
- 公司股份合作协议书57893730.doc
- 湖北中职技能高考数学模拟试题及解答(五).pdf
- 湖北省武汉市蔡甸区2018届高三第一次联考文综试卷(PDF).pdf
- 江南大学现代远程教育2014年上半年课程考试大作业中国公务员制度3.doc
- 湖南师大附中2018届高三月考(四)生物.pdf
- 互联网+增城荔枝蜜项目创新的创业计划.docx
- 湖南师范大学2018年美术学院硕士招生《中小学美术教学论》考试大纲-湖南师范大学考研网.pdf
- 护理操作小组在护理操作技能培训与考核中的应用.pdf
- 公司管理规章制度.doc.doc
- 数据仓库:Redshift:Redshift与BI工具集成.docx
- 数据仓库:Redshift:数据仓库原理与设计.docx
- 数据仓库:Snowflake:数据仓库成本控制与Snowflake定价策略.docx
- 大数据基础:大数据概述:大数据处理框架MapReduce.docx
- 实时计算:GoogleDataflow服务架构解析.docx
- 分布式存储系统:HDFS与MapReduce集成教程.docx
- 实时计算:Azure Stream Analytics:数据流窗口与聚合操作.docx
- 实时计算:Kafka Streams:Kafka Streams架构与原理.docx
- 实时计算:Kafka Streams:Kafka Streams连接器开发与使用.docx
- 数据仓库:BigQuery:BigQuery数据分区与索引优化.docx
文档评论(0)