字符集和字符编码

来源:互联网 发布:东华软件 薛向东 编辑:程序博客网 时间:2024/05/17 06:10

字符集(Charset)

字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等,人们从日常生活中接触到的字符的集合,计算机无法识别。

常用的字符集

常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、通用字符集(Universal Character Set,UCS)、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。
其中当前中文简体用的是GB2312;
Unicode字符集是基于通用字符集(Universal Character Set)的标准来发展;

字符编码(Character Encoding)

字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。即在符号集合与数字系统之间建立对应关系,它是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息。而以计算机为基础的信息处理系统则是利用元件(硬件)不同状态的组合来存储和处理信息的。元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码;即通过计算机可识别的0或1组成的一串2进制数据代表字符;

常用的字符编码

常用的字符集编码:ASCII编码、EASCII编码、UTF-8、UTF-16、UTF-32;

字符编码和字符集的对应关系

字符集 字符编码 备注 ASCII ASCII GB2312 EASCII 不同的字符集如简体中文、繁体中文等字符集共用相同编 码区,计算机通过代码页进行切换不同的编码 UCS Unicode UTF-8 Unicode UTF-16 Unicode UTF-32

Unicode是字符集,可以通过UTF-8、UTF-16、UTF-32表示,但是由于UTF-16表示字符集更符合Unicode的规则,所以说Unicode编码是通常指的是UTF-16编码,其实不存在Unicode编码,如vs中的Unicode就是表示UTF-16编码;
对于按照EASCII编码表示的字符集如简体中文(简体、中国)(GB2312),中文(简体、新加坡),由于共用相同的编码区,所以出现了代码页的概念,操作系统中只有设置相依的代码页,显示正常;
但是,在电脑上做测试出现一个问题:
当我把代码页切换到英语(美国)的时候,盘符上的汉字无法显示、乱码;而文件夹路径中的中文正常显示;感觉好像盘符存在的文件为ASCII编码,而注册表为Unicode编码;

VS的看字节编码和多字节编码

操作系统为Unicode编码,所以系统函数原型为宽字节函数,而系统提供的单字节编码,是将宽字节函数封装了一层,也就是先用宽字节函数调用然后再通过宽字节转换为多字节函数,输出为单字节字符串,在转化过程中用的代码页为本地计算机设置的代码页;
计算机设置本地代码页为英语(美国)的代码页,VS在多字节编码下,用系统函数获取中文路径为乱码的原因:由于在多字节编码中,VS自动将获取系统函数映射为单字节函数,也就是先调用宽字节函数,在将宽字节转换为本地代码页下的多字节,由于英语(美国)的代码页不存在中文,所以转换结果中出现’?’,造成获取系统文件名出问题;解决方案:计算机为英语(美国)代码页,VS在多字节编码设置时,读取中文路径可以通过强制使用宽字节函数,获取一个宽字节下的文件路径,然后通过宽字节转换为多字节,这里代码页参数为简体(中文)或UTF-8;转换后虽然调试时为乱码,但是数据没有问题,可以将数据通过多字节转换为宽字节,就可以显示中文;


0 0
原创粉丝点击