0. 卷首语
编码:将“源对象内容”按照一种“标准”转换为“符合这种标准格式内容”的方法。
解码:和编码对应的,它使用和编码相同的标准将编码内容还原为最初的对象内容。
如果某个文件是用A编码方式编码的,但是打开时按B编码方式打开,就会显示乱码。
关键在于:用正确的编码方式打开文件以显示出正确的文件内容。
1. 编码目的
- 安全角度:数据加密
- 传输角度:信息交换
- 空间角度:文件压缩
2. 编码方式
- ANSI编码
- 美国国家标准协会(ANSI)发布
- 前127位为英文字符,使用ASCII字符集实现
- 后127位为扩展字符,根据操作系统判定
- 简体中文使用GB2312字符集实现
- 繁体中文编码使用BIG5字符集实现
- 西欧字符编码使用ISO-8859-1字符集实现
- ……
- UNICODE编码
- 国际标准化组织(ISO)发布
- 引入原因:8bit的ANSI编码只能表示256种字符,表示26个英文字母是绰绰有余的,但是表示简繁体汉字,韩国语等有着成千上万个字符的非西方字符肯定就不够了,正是如此才引入了UNICODE标准。
- 默认实现方式:所有的字符都会使用2个字节进行存储,英文字符也不例外
- 默认实现指的是:UTF-16 / UTF-16LE / UCS-2 little endian / unicode little endian
- 实现方式
- UTF-8:以8位=1字节为单位,兼容ASCII,根据内容以1-4字节变长存储,例如英文1个字节,汉字3个字节
- UTF-16 / UCS-2:以16位=2字节为单位,不兼容ASCII,定长2字节,无论中英文
- UTF-32 / UCS-4:以32位=4字节为单位,不兼容ASCII,定长4字节,无论中英文
- 字节序
- CPU默认不同,intel/amd默认little endian,motorola/apple/ibm默认big endian
- little endian:把低字节存放在内存的低位,把高字节存放在内存的高位
- big endian:把低字节村房子内存的高位,把高字节存放在内存的低位
- 可以与UTF-16、UTF-32组合,根据CPU默认不同
- 简称:little endian = LE;big endian = BE
- 组合简称:UTF-16=UTF-16LE;UTF-16BE;UTF-32=UTF-32LE;UTF-32BE
- ISO-8859-1/LATIN-1编码
- 前127位为英文字符,使用ASCII字符集实现
- 后127位为扩展字符,使用ISO-8859-1字符集(法语、西班牙语和德语之类的西欧语言)实现
- GBK编码
- 前127位为英文字符,使用ASCII字符集实现
- 后127位为扩展字符,使用GBK字符集(简体中文)实现
3. 编码实现——字符集
ASCII字符集
- 美国信息交换标准字符集
- 以单字节存放英文字符,以双字节存放中文等字符
- strlen(英文)=1;strlen(中文)=2
- 前127位为英文字符,后127位为扩展字
DBCS字符集组
- 双字节简体中文字符集
- 一个汉字算两个英文字符!
- 前127位为英文字符(半角),后127位两两组合为中文字符(全角)
- 包括以下四种中文字符集,在后127位里做了下文章
- GB2312:ASCII的简体中文扩展字符集
- BIG5:ASCII的繁体中文扩展字符集
- GBK:ASCII的中文扩展字符集,包括了所有的简体和繁体,
- GB18030:GBK+CJK的中文扩展字符集,少数民族的字都进来了,日韩的字进来了,准确点说,它是以ASCII+UNICODE共同为基础的杂种字符集
C#中默认的是UTF-16,因不兼容ASCII,所以在处理C#字符串的时候只能是byte,stream等方式去处理
XML中默认的是UTF-8
系统输入里ALT + 数字 = 汉字,根据UNICODE显示
char(ansi) / nchar(unicode),因此strlen(char["xx张oo"]) = 6;strlen(nchar["xx张oo"]) = 5
系统同时支持ANSI和UNICODE,文件创建时默认为ANSI,但在重新打开时会只能判定编码后显示
而当你新建一个文本文件时,记事本的编码默认是ANSI, 如果你在ANSI的编码输入汉字,那么他实际就是GB系列的编码方式,在这种编码下,"联通"的内码是:
c1 1100 0001
aa 1010 1010
cd 1100 1101
a8 1010 1000
注意到了吗?第一二个字节、第三四个字节的起始部分的都是"110"和"10",正好与UTF8规则里的两字节模板是一致的,于是再次打开记事本时,记事本就误认为这是一个UTF8编码的文件,让我们把第一个字节的110和第二个字节的10去掉,我们就得到了"00001 101010",再把各位对齐,补上前导的0,就得到了"0000 0000 0110 1010",不好意思,这是UNICODE的006A,也就是小写的字母"j",而之后的两字节用UTF8解码之后是0368,这个字符什么也不是。这就是只有"联通"两个字的文件没有办法在记事本里正常显示的原因。
而如果你在"联通"之后多输入几个字,其他的字的编码不见得又恰好是110和10开始的字节,这样再次打开时,记事本就不会坚持这是一个utf8编码的文件,而会用ANSI的方式解读之,这时乱码又不出现了。
2. 在系统(Windows/Linux)中新建文件的编码
3. 在Java中写文件的编码(默认为java文件编码,网络上的文章是错的!)
http://elf8848.iteye.com/blog/271742
4. Servlet的编解码
5. JSP的编码与解码
http://hi.baidu.com/amwaisn/blog/item/7e981597ff71ee47d1135e88.html
http://wenku.baidu.com/view/b675f311f18583d049645947.html
http://msq.iteye.com/blog/101050
6. Http的编解码
7. URL的编解码
分享到:
相关推荐
就业报告系列之一:抽丝剥茧,就业压力并不大-0226-光大证券-19页.pdf
5. 盈利预测与估值:报告维持了覆盖公司的盈利预测和估值不变,并对相关风险进行了提醒,如在线教育监管政策的变化和非线上投放获客效果低于预期的风险。 6. 投资建议:基于以上分析,报告建议关注具有较高市场份额...
在线K-12(Kindergarten through 12th grade)教育是近年来教育行业的一大热点,尤其是在全球数字化进程的推动下,其经济模型逐渐成为研究的重点。这篇文档将深入剖析在线K-12教育培训的经济模式,揭示其背后的商业...
教育行业新机遇系列之四:抽丝剥茧,探寻民办学校成长真谛-180306.pdf
【缠论体系详解】 缠论,源于金融市场的技术分析...以上内容是对“光大证券_0607_技术形态选股系列报告之三:抽丝剥茧解缠论”文件的总结,详细介绍了缠论的基本概念、买卖点分类以及在实际操作中的应用和注意事项。
"在线教育系列之二:抽丝剥茧,详解在线K~12教培经济模型" 本报告对在线教育系列的第二部分,深入探讨在线K~12教培经济模型。我们认为,随着在线教育营销获客规范度提升,未来一段时间在线教育机构的线上投放获客将...
5. **情感诈骗与防范**:陈宇鹏的行为可能是情感诈骗的一种形式,即利用甜言蜜语和虚构的身份赢得信任,然后逐渐淡出或消失。对此,人们需要提高警惕,尤其是面对过于完美的陌生人,要有理性分析的能力。 6. **航空...
在React的世界里,"抽丝剥茧的学前端之React篇"是一段深入学习和实践React框架的心得体验。这个项目旨在系统性地讲解React的基础概念、核心特性以及实际项目搭建的过程,帮助开发者逐步理解并掌握React技术栈。 ...
新零售深度报告:抽丝剥茧看盒马,写在马云巡店之后,是一份专注于分析盒马鲜生零售模式...盒马鲜生作为新零售的代表之一,其商业模式、用户体验、商品管理等方面的经验与策略,为其他零售业提供了新的思路和实践案例。
C 语言嵌入式系统编程修炼之一:背景篇 C 语言嵌入式系统编程修炼之二:软件架构篇 C 语言嵌入式系统编程修炼之三:内存操作 C 语言嵌入式系统编程修炼之四:屏幕操作 C 语言嵌入式系统编程修炼之五:键盘操作 C 语言...
本文标题为“中泰证券_0118_量化投资策略报告:抽丝剥茧,透视行业和风格,重构A股量化分析框架”,从字面上可提炼出几个关键知识点:量化投资策略、行业与风格分析、A股市场、重构分析框架。报告详细分析了如何通过...
盒马鲜生作为阿里巴巴集团的一员,其独特的商业模式得到了阿里的高度认可,预示着新零售的潜力和前景。 首先,盒马鲜生与传统超市在模式和体系上存在显著差异。它打破了传统的零售边界,实现了线上线下的深度融合。...
《抽丝剥茧App混合开发进阶课》是一门针对移动应用开发的高级教程,旨在帮助开发者深入理解并掌握混合开发技术。这门课程通过视频形式呈现,为学习者提供了丰富的视听体验,使抽象的编程概念更加生动易懂。课程不仅...
长远来看,社区团购将成为调味品行业的重要销售渠道之一,促使企业更加敏锐地应对渠道变化,提高行业整体运营效率,向快速消费品行业的销售模式靠拢。\n\n投资建议方面,报告推荐关注估值合理、改革成效显现的中炬...
这份深度报告中提供了行业走势图,显示了调味品行业与沪深300指数的对比情况,表明调味品行业的走势在近期有一定程度的波动,但整体保持上升趋势。报告的撰写团队包括分析师寇星和卢周伟,他们分别来自华西证券,为...
社区团购作为一种新兴的电商模式,兴起于2015年并迅速在2020年爆发,对传统调味品销售渠道造成了显著冲击。社区团购的优势在于价格便宜、覆盖范围广,通过大量订单获得较低的采购成本,以低价策略吸引消费者,并在...
C 语言嵌入式系统编程修炼之一:背景篇 C 语言嵌入式系统编程修炼之二:软件架构篇 C 语言嵌入式系统编程修炼之三:内存操作 C 语言嵌入式系统编程修炼之四:屏幕操作 C 语言嵌入式系统编程修炼之五:键盘操作 C 语言...
C 语言嵌入式系统编程修炼之一: 背景篇 22 C 语言嵌入式系统编程修炼之二: 软件架构篇 24 C 语言嵌入式系统编程修炼之三: 内存操作 30 C 语言嵌入式系统编程修炼之四: 屏幕操作 36 C 语言嵌入式系统编程修炼之五: ...