编码小结--宽字符--中文

unicode

对于汉语、日语、韩语等 ASCII 编码之外的单个字符使用宽字符的编码方式。常见的宽字符编码有 UTF-8 , UTF-16 和 UTF-32,它们都是基于 Unicode 字符集的,能够支持全球各种语言,每个字符用 16位表示。总之,Unicode是给字符分配码位,UTF-8是将字符转成可存储的字节顺序。

宽字符

C语言的宽字符是基于 wchar_t 数据类型的。这个数据类型被定义在 wchar.h
typedef unsigned short wchar_t;

#include <wchar.h>//宽字符头文件
#include <locale.h>//setlocale设置本地环境的头文件
void wcharprint();
 // 可以使用宽字符存储中文字符
    void wcharprint(){
        wchar_t a = L'A';  //英文字符(基本拉丁字符)
        wchar_t b = L'9';  //英文数字(阿拉伯数字)
        wchar_t c = L'中';  //中文汉字
        wchar_t d = L'国';  //中文汉字
        wchar_t e = L'。';  //中文标点
        wchar_t m_ask[] = L"Who are you?";
        wchar_t *u_name = L"你是谁?";
        //将本地环境设置为简体中文
       // setlocale(LC_ALL, "zh_CN");//for windows
         setlocale(LC_ALL, "zh_CN.UTF-8");//simple chinese for linux ,mac os
         /*
         en,en_GB ,en_US,*/
        //使用专门的 putwchar 输出宽字符
        putwchar(a);  putwchar(b);  putwchar(c);  putwchar(d);
        putwchar(e);  putwchar(L'\n');  //只能使用宽字符
        //使用通用的 wprintf 输出宽字符
        wprintf(L"Wide chars: %lc %lc %lc %lc\n",a, b, c, d);
       
        wprintf(L"m_ask: %ls \nu_name: %ls\n", m_ask, u_name);
        //输入宽字符
        wscanf(L"%ls",m_ask);
        wprintf(L"h: %ls \m_ask: %ls\n", h, m_ask);
    }

UTF-8使用一至四个字节为每个字符编码:

  1. 128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。

  2. 带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码(Unicode范围由U+0080至U+07FF)。

  3. 其他基本多文种平面(BMP)中的字符(这包含了大部分常用字)使用三个字节编码。

  4. 其他极少使用的Unicode辅助平面的字符使用四字节编码。
    UTF-8 编码是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8 节省空间。

GBK

GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准,向上支持 ISO 10646.1国际标准。支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字,都是双字节的。使用的时候需要中文语言包支持。

ASCII

主流编码方式,占用8个字节,主要服务英语。

常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值