关于Unicode

今天做实验,想看看在内存中unicode的表示。

使用的是Visual studio,发现永远是2个字节。并且cpp文件使用GB2312编码。个人理解:也许和编译器有关,就算cpp文件使用其他的编码格式,仍然还是2个字节

utf-8,汉字是3个字节。


UNICODE 是字符集,UTF-8 和 UCS-2 是编码的规则,WINDOWS 采用的UCS-2编码方式,WEB,数据库一般采用的是UTF-8。


事实是这样:unicode标准字符可以理解成utf-32.但是在系统中表示或者在网络中传输要表示成UTF-8或者其他格式,在内存中看到的已经转化成这种格式了,但是实际上还是每一个字符对应的一个十六进制编码。


ANSI调用UNICODE环境的DLL出现内存泄露的情况? - VC/MFC / 




引自:


这几天些一段代码,使用tinyxml读写xml文件,发现读写中文时总会出现乱码,然后认真研究了一下UNICODE字符编码问题,然后总结了一下,用一段简短的文字描述一下原因.
 
Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。也就是说,采用这种编码方式后,世界上所有的语言字符都有一个UNICODE编码(一个数字).
UNICODE虽然为所有语言虽有字符都编了一个号,但是它并未规定如何存储,传输这些UNICODE字符,例如对于"中a",可以采用UNICODE编码来存储,这样它将占用4个字节,但其实字符"a"用一个字节就可以表示,字符"中"才需要两个字节表示,这样可以节省50%的空间,呵呵,如果在考虑到大字节序,小字节序等等,这样又可以产生不少编码变种,例如UTF-8,UTF-16等等,只要软件能够识别它们就可以了.
 
计算机采用UNICODE之后,内存中并不存放UNICODE字符的编码, 而是存放字符在UNICODE字符集中的序号(如果是ANSI字符,它们的序号和UNICODE编码相同).
如果字符串中的字符在内存中是以"UNICODE字符集中的序号"存在,就称之为UNICODE字符串或者宽字节字符,函数MultiByteToWideChar就是干这个事情的.如果你想将宽字节字符串保存到UNICODE文件中,就必须先将其转换为相应的UNICODE字符编码,然后才能保存,例如你的文件采用的是UTF-8(一种UNICODE编码),保存宽字节时必须首先将其转换为UTF-8编码,然后在保存,WideCharToMultiByte就干这个事情.
 
现在你知道为何读写XML或HTML文件为何还有乱码的吧.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值