• 转:C++三种编码方式


    三种编码方式,分别是:

    1、SBCS(single byte character set)

    2、MBCS(multi-byte characterset) 

    3、Unicode

    SBCS是一个字节一个字符,MBCS是几个字节一个字符,可能是一个,两个,三个不等,但是实际上,绝大多数时候使用两个字节的,所以有时候看到DBCS(double-byte character set)代替MBCS也不奇怪;Unicode一律是两个字节编码。在windows nt内核中,API一律使用的是unicode编码,所以如果你在编写软件过程中使用非unicode编码方式,系统也会自动转换成unicode执行,然后返回的结构再转换为你使用的类型。单字节表示用char,unicode使用wchar_t.我们是在单字节的光芒下成长起来的,一时间完全抛弃单字节未免难以接受,但是有些时候我们又不可避免的需要使用unicode字符集合,那么ms提供的解决办法是用宏:TChar

    我们看看他的定义:

    #ifdef UNICODE

    typedef wchar_t TCHAR;

    #else

    typedef char TCHAR;

    #endif

    ok,一切问题都解决了,我们只需要定义UNICODE就一样使用wchar_t,是很方便。另外,在windows的COM中使用的一律是unicode,但是MFC默认的确实MBCS,所以你用MFC写的类库如果放到了COM下,有些字符的格式化方式或者返回值错误的,原因就是com一律使用unicode,而unicode使用wchar_t('00')结尾,char却是使用'0'结尾的。一般情况下,普通字符需要加载_T宏才能正常运行,比如MFC中你写道S = "FSDFSDF",那么该类转到COM下,需要写S = _T("FSDFSDF");才可以。我们可以想象宏_T跟TCHAr的功能一样,如果使用UNICODE就自动在constant string前面加上L,否则就直接使用。

    以后使用C++编写程序,如果出现乱码,首先检查C++的编码类型,而且一般情况下都是结束符号没有弄对,SBCS和MBCS都是以单字节0结尾,UNICODE是以双字节00结尾的。

  • 相关阅读:
    关闭Pinterest通知
    android——创建camera应用(译)
    Android样式——Styles
    Android Fragment学习(一)
    Win32汇编环境配置
    关于微信检测SDK应用的原理浅析(iOS)
    iOS的Mantle实战
    Objective-C运行时的一些技巧
    Autolayout入门教程
    基于RAC的通用TableView
  • 原文地址:https://www.cnblogs.com/killer-xc/p/6611230.html
Copyright © 2020-2023  润新知