`
ayagen
  • 浏览: 12656 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

"字符集编码" --- "编码字符集" 笔记

阅读更多
ANSI  美国国家标准协会
ANSI编码其实是一个统称,指的是本地操作系统默认的编码
在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码,在英文系统中,ANSI编码指的是CP1252(类似于ISO-8859-1,只不过在\u0080 到 \u009F 的范围内包含了一些附加字符)

ASCII 美国标准信息交换码(国际标准代码是ISO-646): 用7位二进制数字来表示英文字符.

ISO-8859-1: 对ASCII剩下的128个码位为英文做的扩展.(也叫做Latin-1). 
背景:由于ASCII码只使用了7个二进制位,也就是说一个字节可以表示的256个数字中,它仅使用了0~127这128个码位,剩下的128个码位便可以用来做扩展,用来表示一些特定语言所独有的字符,因此对这多余的128个码位的不同扩展,就形成了一系列ISO-8859-*的标准。例如为英语作了专门扩展的字符集编码标准编号为ISO-8859-1,也叫做Latin-1,为希腊语所作的扩展编号为ISO-8859-7等

UNICODE:用一个大小不超过2的16次方的整数数字为每个字符编号(因此UNICODE是一种编码字符集,而非字符集编码).不够用   (由多家公司发起.)

UCS(UNIVERSAL CHARACTER SET):是一个31位(非32位?)的编码字符集,太多了(由ISO着手制定)

两者(UNICODE和UCS)统一:两者统一了抽象字符集(即任何一个在Unicode中存在的字符,在UCS中也存在),且最靠前的65535个字符也统一了字符的编码。
对于码空间,两者同意以一百一十万为限(约数),Unicode将码空间扩展到了一百一十万,而UCS将永久性的不使用一百一十万以后的码位。
现在再讲Unicode只包含65536个字符是不对的.
Unicode联盟与ISO工作组也同意今后任何的扩展工作两者均保持同步
现在提起Unicode,指代两者均无不妥

编码字符集: 我们常说的Unicode字符集,指的就是这种被分配了整数编号的字符集合.
但是:编码字符集中字符被分配的整数编号,不一定就是该字符在计算机中存储时所使用的值,计算机中存储的字符到底使用什么二进制整数值来表示,是由字符集编码决定的.

字符集编码决定了如何将一个字符的整数编号对应到一个二进制的整数值.(从整数到整数),而编码字符集是从字符到整数.
几乎所有的字符集编码方案中,英文字母的整数编号与其在计算机内部存储的二进制形式都一致.
适用于Unicode字符集的UTF-8编码形式,就将很大一部分字符的整数编号作了变换后存储在计算机中

UTF-8是一种字符集编码,可用于UNICODE字符集(不限于UNICODE,也可以用来给音频,视频等进行编码,只是编出的文件很可能没有播放器支持)
UTF-16,字符集编码,对UNICODE中的前65536个字符编号都不做变换,直接作为计算机存储时使用的值. 因些会使很多人有一种误解认为UNICODE是一种编码.


编码字符集和字符集编码不是一回事,而有的字符集编码又实际上没有做任何事,而是直接把字符编号做为计算机存储时使用的值.GB2312和GBK都是这样:

GB2312最初是指一个编码字符集(包含了ASCII所包含的英文字符,同时加入了6763个简体汉字以及其他一些ASCII之外的符号).GB2312也有自己的编码方案(即直接存储,不做任何转换),只不过这种编码方案一直没有正式的名称,所以现在我们提到GB2312,常常即指这个字符集,也指这种编码方案.
GBK是GB2312的后续标准,添加了更多的汉字和特殊符号,类似的是,GBK也是同时指他的字符集和他的编码.

GBK还是现如今中文Windows操作系统的系统默认编码(这正是几乎所有网页上的,文件里的乱码问题的根源)


在Java中,字符只以一种编码形式存在,那就是UTF-16编码
但“在Java中”到底是指在哪里呢?就是指在JVM中,在内存中,在你的代码里声明的每一个char,String类型的变量中.

这使得一个字符存在的世界分为了两部分:JVM内部和OS的文件系统:在JVM内部,统一使用UTF-16编码, 当这个字符从JVM内部移到外部(即保存为文件系统中的一个文件时),就进行了编码转换,使用了某个具体的编码方案

即所有的编码转换只发生在JVM和OS的交界处 (也即各种输入输出流起作用的地方)

JAVA中的IO两大阵营:面向字符的(Reader, Writer) 面向字节的输入输出流:
面向字节,是指文件在文件系统中的二进制内容和读入JVM内部后的二进制内容一致.(适用于视频,音频文件,或不需要做变换的文件)
面向字符,是指文件的字符在读入JVM前后的表现形式是一样的

所以可以认为,面向字符的Reader, Writer类实际上隐式地为我们做了编码转换: 读入文件时,用默认的编码(即操作系统的默认编码,中文WINDOWS操作系统是GBK,Reader和Writer也只有这么聪明)
将文件解码(即从表示某字符内存地址的二进制数值转换为该字符在编码字符集中的数值)
然后利用GBK字符集和UNICODE字符集(?JVM内部默认的编码字符集)的映射关系找到此字符在UNICODE字符集中的数值,
然后再用UTF-16编码(JVM内部唯一指定官方字符集编码)对该字符编码
从而得到该字符在JVM内存中的二进制地址值

在中文OS中,当我们有一个用UTF-8编码的文件,使用Reader来读的时候,显然会出错.
既然Reader只认得系统的默认编码(GBK),那我们就只能在Reader读文件前将文件转换成GBK编码,
InputSteamReader 和OutputStreamWriter就可以完成这样的功能,这两个类是字节流和字符流之间的适配器,在实例化的时候可以指定编码方式

PrintWriter out=new PrintWriter(new OutputStreamWriter(new FileOutputStream("c:/utf-8.txt"),"UTF-8"));

这里的文件utf-8.txt是用UTF-8编码的,所以我们在实例化OutputStreamWriter时,指定编码方式为"UTF-8",这样在传给Writer之前,系统就会
1. 用UTF-8编码对文件utf-8.txt进行解码,得到字符在GBK字符集中的数值(因为中文OS,默认使用GBK字符集?)
2. 将解码后的文件再用系统默认编码(GBK)进行编码
3. 接下来的事情就可以交给Reader来做了



















分享到:
评论
1 楼 mimicom 2012-04-21  
UCS不就是unicode么?..

相关推荐

    字符编码笔记:ASCII,Unicode和UTF-8

    今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞...下面就是我的笔记,主要用来整理自己的思路。.................

    字符编码学习

    目前Unicode是采用16位编码体系,其字符集内容与 ISO10646的BMP(Basic Multilingual Plane)相同。Unicode于1992年6月通过DIS(Draf International Standard),目前版本V2.0于1996公布,内容包含符号6811个,汉字...

    mysql必知必会读书笔记.doc

    字符集是字符加上编码 校对规则是对编码比较的一套规则 校对规则的一些命名规则 1.两个不同的字符集不能使用同一种校对规则 2.校对规则命名的习惯 (相关字符集)_(地区语言名)_(cs大小写敏感/ci大小写不敏感/bin二元)...

    Qt工作笔记-Qt5中中文编码方面的笔记

    如果没有指定本地字符集,在qtcreator上开发或者其他Qt项目上,使用的是UTF-8编码,就算去toStdString()也是to到了UTF-8编码。 使用这个函数去设置项目的字符集: QTextCode::setCodecForLocale(QTextCodec::...

    day019-io笔记和代码.rar

    * 1、因为字符集不统一,即编码和解码new String(b,0,read,"gbk")字符集不一致 * 2、因为字节流读取汉字的时候,字节数组长度不够,将一个汉字拆开了 * 解决: * 1. 用字符流用统一的字符集(最...

    JSON 编码/解码:解析 JSON 字符串并返回 MATLAB 对象或将 MATLAB 对象编码为 JSON 字符串-matlab开发

    笔记: 此函数实现了原始 RFC 4627 中指定的 JSON 超集 - 它还将解码标量类型和 NULL。 RFC 4627 仅支持嵌套在数组或对象中的这些值。 尽管此超集与较新的 RFC 7159(旨在取代 RFC 4627)中“JSON 文本”的扩展定义...

    day023-xml解析笔记和代码.rar

    第一行用了定义xml文件的,写版本号和字符集 1.注释不能放到第一行 1.必需有声明,声明必需在第一行。 2.文档声明的字符编码必需和文档本身的编码一致 2.标签不能交叉嵌套使用(标签名字随便...

    Java学习笔记-个人整理的

    {13.10}可滚动结果集}{201}{section.13.10} {13.11}Procedure}{201}{section.13.11} {14}xml}{204}{chapter.14} {14.1}元素}{204}{section.14.1} {14.2}XML的设计}{205}{section.14.2} {14.3}DTD/Schema}{205}...

    JAVA学习笔记第十四天

    JAVA学习笔记第十四天——字符集编码解码、泛型的使用、数据结构栈和链表、集合框架&List,示例代码,里面主要是知识点的具体使用和各种现象。

    机器翻译及相关技术笔记

    而 \xa0 属于 latin1 (ISO/IEC_8859-1)中的扩展字符集字符,代表不间断空白符nbsp(non-breaking space),超出gbk编码范围,是需要去除的特殊字符。再数据预处理的过程中,我们首先需要对数据进行清洗。 二、注意

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    选择安装路径,选择数据库版本(企业版),选择字符集(默认值) 填写全局数据库名,管理口令 6. 步骤5/8:先决条件检查 如果你的电脑满足要求但仍然显示检查失败,这时候直接忽略,勾选全部忽略 7. 步骤6/8:概要信息...

    谷歌师兄的leetcode刷题笔记-chrome-three-sentences:一个谷歌浏览器扩展,将TLDR网页总结为三个句子

    支持地球上的任何语言,因此您无需为损坏的字符集或编码而烦恼。 演示 安装 从 下载three-sentences.crx文件。 将文件拖放到您的 google chrome 浏览器扩展页面。 链接到扩展页面 - chrome://extensions/ 完毕。 我...

    vc源代码合集0951.rar

    2012-06-12 12:22 10,537 C和C++字符串处理函数.txt 2012-06-12 12:21 8,825 c扫描器源码.txt 2012-06-12 12:39 505,110 c语言也能干大事全部板书(带书签)-感谢rupeng.com鹏友的整理.rar 2012-06-12 12:10 183,001 ...

    动手学深度学习-学习笔记(四)

    本文的主要内容有:机器翻译及相关技术;注意力机制与Seq2seq模型;Transformer。...而 \xa0 属于 latin1 (ISO/IEC_8859-1)中的扩展字符集字符,代表不间断空白符nbsp(non-breaking space),超出

    Java开发详解.zip

    032004_【第20章:Java新IO】_字符集笔记.pdf 032005_【第20章:Java新IO】_Selector笔记.pdf 042101_【课程讲解】_附录:Eclipse开发工具笔记.pdf 050101_〖开发实例〗_Java开发实例讲解(人员管理)笔记.pdf

    机器翻译笔记

    而 \xa0 属于 latin1 (ISO/IEC_8859-1)中的扩展字符集字符,代表不间断空白符nbsp(non-breaking space),超出gbk编码范围,是需要去除的特殊字符。再数据预处理的过程中,我们首先需要对数据进行清洗。 分词 字符...

    day021-反射和注解笔记和代码.rar

    第一个next(可以设置生成文档注释的目录),第二个next,设置字符集 如果是UTF-8编码,且有中文,请输入-encoding UTF-8 -charset UTF-8 4. 勾选一个生成完毕后,直接通过浏览器打开的选项 5...

    net学习笔记及其他代码应用

    答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 25.请详述在dotnet中类(class)与结构(struct)的异同? 答:Class可以被实例化,属于引用类型,是分配在内存的...

    leetcode2sumc-CodingChallenges:来自各种来源的一组编码挑战。用C++实现的解决方案

    编码挑战 在这个存储库中,您可以找到我对各种计算机科学问题的解决方案。 简单的 第485集-倩 给定一个二进制数组,找出该数组中连续 1 的最大数目。 示例 1:输入:[1,1,0,1,1,1] 输出:3 说明:前两位或后三位为...

Global site tag (gtag.js) - Google Analytics