中文字符集与编码转换

本文深入探讨了字符在程序中的处理流程,包括代码阶段、运行时内存和不同介质中的字符集转换,以及常见中文字符集如GB18030、GB2312、GBK和BIG5的区别。同时,介绍了通用编码如UTF-8和UTF-16的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  字符在程序中的关注点:

              1. 代码阶段,即编程器认为源码中的中文字符串的字符集, 由编辑环境决定。

              2.程序中(运行时的内存中,一般固定一种字符集),由类库接口和编译器决定,

                          比如 window ; _T 结合编译开关可以自动转成 UNICODE 或 ansi, 

                          比如 QT  setCodecForLocale  setCodecFor 等函数,可以把代码的字符转换为 QT内部的utf-16。

                         比如我的xbString 类库,是不固定字符集的( 同时支持 ascii, GB18030, utf-8 , utf-16),每一个对象可以是一种字符集, 当发生字符比较/查找/拼接时,自动转换成一致的字符集。

              3.介质: 

                         屏幕输出输出(系统环境字符集),若与程序内存中不一致, 需要转换。

                        文件输出输入, 与程序内存不一致, 需要转换。

                        tcp : 服务端/客户端的编码不一致时,必须进行转换,程序必须知道对侧的编码

            以上3处是发生乱码的位置,另外也有字符集与操作系统语言环境不相容导致乱码。


    字符集,windows 又称代码页,  与操作系统的当前字符集项不匹配时,会显示乱码。
           常见的简体中文字符集( windows  代码页 936 )

              GB18030  :
                          1字节 兼容 ascii 字符  
                          2 字节  普通中文  标点符号等
                          4字节   特殊中文以及少数民族文字等;
              GB2312  GBK:都是GB18030的子集  

              BIG5 :    繁体字,独立体系, 与 GB18030 体系不相容  。

   字符编码  
               1. 字符集对应编码,此时字符集 = 字符编码

                     例如:   GB18030  , gbk , ansi  .... , 其中 ansi 在windows中 等效于操作系统使用的字符集编码  。
             

              2.  通用编码, 基本把世界上的所有语言都编码了:

                       UTF8:   单个字长度 1/2/3/4/5/6 字节, 0 表示终结。  
                       utf16(unicode): 单个字长度 2/4 字节,  连续2个0 表示终结。 

                       utf32:  没用过,应该是  单个字长度4 字节,  连续4个0 表示终结。 

       

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值