说说Unicode这个东东!

只能说一声叹息,被这个东东害的一点都不清,及时到现在,我也不知道我是不是搞不清了。但是不发点牢骚是不行的,也算为搞得更清楚打点基础,(我感觉这就是教育中的一点,一直被告诉应该这样做,一直只给你一个答案,告诉你按着这么做就可以了。 只知道正确,却不知道错在哪,纠结中……)。编程时总是能听到赫赫大名的Unicode,确总是感觉遥不可及。

首先说下windows下的记事本,这个东西首先让我在概念上模糊,而且是看了很多人的博客之类的文章,真是越看越乱,我的头里现在知道的也不知道是不是正确的。好吧,让我细细说来让我迷惑的问题。通常我用的是windows,unix/linux之类的也用过来的,但是没有注意到,总的来说就是不常用,我的大脑已经被microsoft洗脑了,很多东西就会固执己见,发现自己理解的总是与大神理解点是不同的。

当我记事本存储文本文件时,一共有4种编码方式,分别为ANSI、Unicode、Unicode big endian、UTF-8。第一个ANSI就让我非常迷惑了,我看见这个有两个词“ansi c”、“ansi码”,百度一下给出一个百度百科,只是让我更迷惑(百度百科真想让我骂人,说不清是什么东西),ansi翻译过来就是美国国家标准学会,这个跟我想知道有个毛关系。还有一个定义-一种字符代码,这应该就是我想要找的,“不同的国家和地区制定了不同的标准,由此产生了GB2312、BIG5、JIS等各自的编码标准,这些使用两个字节表示一个字符的各种汉字延伸编码方式,称为ansi编码“。因为我还知道ascii,这是基于拉丁字母的一套计算机编码系统,而前面有时asci编码,TMD,搞晕了都是编码,那个是那个。百度搜下ascii竟然没有对应的词条,还好有维基,这里就是我比较熟悉的那套编码了,33个字符无法显示,95个可显示字符,共有128个字符0~127(0x0~0x7E),所以先前看到的ansi编码通常使用0x80~0xFF范围的2个字节来表示1个字符,为了兼容ascii码,不知道理解是否正确,反正弄乱了。在维基百科上我找不到”asci编码“这个词条,现在我都不知道这个词条是否正确。然后在知乎让我理解加深了一点,记事本上的编码”ansi‘其实是Windows code pages,这个模式根据当前locale选定具体的编码,比如是简体中文下是GBK,那么此文本编码是GBK,若是台湾繁体中文下locale是BIG5,那么ansi编码就是BIG5编码,反正兼容ascii的地区码都是asci编码,不知道理解是否正确。

下面三个都与Unicode这个词有关,先说我好像知道的。windows下的unicode应该是UTF-16LE、Unicode big endian就是指UTF-16BE。Unicode现在这个词到底指什么弄不明白,UCS-2、UCS-4、UTF-8、UTF-16、UTF-32这又来5个东西,“Unicode应该是包括字符集和编码集的,ascii其实也是,只是字符集与编码集一样”。我也不知道这是哪里看到的,照这样前面两个是字符集,后两个是编码集。在维基百科上写道Unicode是计算机科学领域里的一项业界标准,但我们常常说Unicode编码,带来烦恼真多。Unicode伴随着通用字符集的标准而发展,这里我感觉我其实一直指的的是UCS,UCS不仅给每个字符分配代码,而且赋予一个正式名称,十六进制数前“U+”。UCS有的码空间是从U+0000到U+10FFFF,17个平面(0x0-0x10),每个平面2^16=65'536(0x0000~0xffff)个码位。第一个平面包含了最常用的字符,该平面成为基本多语言平面(Basic Multilingual Plane)简称BMP(我一直以为是位图,哈哈),其他平面称为辅助平面。2-byte Universal Character Set(UCS-2)是定长的编码方式,有这样的看法的我在两个地方看法,故我姑且认定这是正确的,UMS-2就是使用16位码元来表示码位,就是表示BMP。而UTF-16非定长,使用一个或者两个16位的码元表示码位,就是用来扩充UCS-2的,可以完全表示0x0~0x10FFFF。UTF-32是定长编码,是UCS-4的子集,UCS-4足以用来表示多有Unicode的字码空间,最大的码位空间为0x7FFFFF个码位,好吧,反正提出个更小码位空间的UTF-32,只有0x0~0x10FFFF的码位空间。还有一个BOM这个东东没有说,在windows下,文本文件最前面总是有两个字节写着FE FF后者FF FE(用十六进制看),我就知道这个有两个作用,若是有这个就直接告诉你这是一个Unicode编码,否则就是asci编码,写到这句话我发现我的定义完全混乱,但又感觉是应该那么表达出来。第二点,FE FF,关于little endian。还有太多没有搞清楚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值