zoukankan      html  css  js  c++  java
  • Unicode 和多字节字符集 (MBCS)

    有些国际市场以大字符集来使用日文和中文等语言。为了支持这些市场的编程,Microsoft 基础类库 (MFC) 支持以两种方式处理大字符集:
      Unicode
      多字节字符集 (MBCS)
    Unicode 字符串的 MFC 支持
    整个类库有条件地支持 Unicode 字符和字符串。特别是 CString 类也支持 Unicode。
      注意 MFC 库的 Unicode 版本不会复制到硬盘上,除非您在“自定义”安装时选择它们。在其他类型的安装过程中不会复制它们。如果试图在没有 MFC
      Unicode 文件的情况下生成或运行 MFC Unicode 应用程序,可能会出现错误。
      要将这些文件复制到硬盘上,请重新运行安装程序并单击“添加/移除功能”。单击“语言工具”,单击“Visual C++”并单击“Visual C++
      类和模板库”,然后选择“ATL MFC 共享库 Unicode”和“ATL MFC 静态库 Unicode”。这会将以下文件复制到硬盘上:
          UAFXCW.LIBUAFXCW.PDBUAFXCWD.LIBUAFXCWD.PDB
          MFCxxU.LIBMFCxxU.DBGMFCxxU.DLLMFCxxUD.LIB
          MFCxxUD.PDBMFCxxUD.DLLMFCDxxUD.LIBMFCDxxUD.PDB
          MFCDxxUD.DLLMFCNxxUD.LIBMFCNxxUD.PDBMFCNxxUD.DLL
          MFCOxxUD.LIBMFCOxxUD.PDBMFCOxxUD.DLL

    其中“xx”表示文件的版本号,例如“70”表示 7.0 版本。
    CString 是基于 TCHAR 数据类型的。如果为程序的生成定义了符号 _UNICODE,则会将 TCHAR 定义为 wchar_t 类型(一个 16
    位的字符编码类型);否则,会将它定义为 char(普通的 8 位字符编码)。于是,在 Unicode 下,CString 由 16 位字符组成。如果没有
    Unicode,它们则由 char 类型的字符组成。
    要完成应用程序的 Unicode 编程,还必须:
      使用 _T 宏有条件地编写字符串的代码,使之可移植到 Unicode。
      当传递字符串时,请注意函数参数要求的长度是以字符为单位还是以字节为单位的。如果在使用 Unicode 字符串,这一区别是很重要的。
      使用 C 运行时字符串处理函数的可移植版本。
      使用以下用于字符和字符指针的数据类型:
        TCHAR 这里将使用 char。
        LPTSTR 这里将使用 char*。
        LPCTSTR 这里将使用 const char*。CString 提供 operator LPCTSTR 来在 CString 和 LPCTSTR
        之间进行转换。
    CString 还提供识别 Unicode 的构造函数,赋值运算符和比较运算符。
    有关 Unicode 编程的相关信息,请参见 Unicode 和 MBCS 和 Unicode
    主题。《运行时库参考》中定义了所有字符串处理函数的可移植版本。请参见类别国际化。
    MBCS 字符串的 MFC 支持
    类库还支持多字节字符集,特别是双字节字符集 (DBCS)。
    在这一方案下,字符的宽度可以是一个字节,也可是两个字节。如果字符的宽度是两个字节,那么它的第一个字节就是一个特殊的“前导字节”,该字节是根据所使用的代码页从某个特定范围选定的。前导字节和“尾字节”合起来指定一个唯一的字符编码。
    如果为程序的生成定义了符号 _MBCS,则类型 TCHAR(CString 基于该类型)将映射到 char。由您来决定 CString
    中的哪些字节是前导字节,哪些字节是尾字节。C 运行时库提供函数来帮助您进行确定。
    在 DBCS 下,给定的字符串可以包含所有的单字节 ANSI 字符、所有的双字节字符或两者的组合。这些可能性需要您在分析字符串(包括 CString
    对象)时要备加小心。
      注意 MFC 中的 Unicode 字符串序列化能够读取 Unicode 和 MBCS
      字符串,而不论运行的是哪个版本的应用程序。正因为如此,数据文件在程序的 Unicode 和 MBCS 版本之间是可移植的。
    CString 成员函数使用其调用的 C 运行时库特殊的“一般文本”版本,或使用识别 Unicode 的函数,如 lstrlen 或 lstrcpy。因此,如果
    CString 函数通常情况下调用 strcmp,那么它会调用相应的一般文本函数 _tcscmp。根据符号 _MBCS 和 _UNICODE
    定义方式的不同,_tcscmp 映射如下:
          _MBCS 已定义_mbscmp
          _UNICODE 已定义wcscmp
          两者都未定义strcmp

      注意 符号 _MBCS 和 _UNICODE 是互相排斥的。

  • 相关阅读:
    路径专题
    java.lang.IllegalArgumentException: Result Maps collection does not contain value for java.lang.Integer
    DER input, Integer tag error的异常处理
    myeclipse,eclipse控制台输出乱码问题
    大话设计模式之简单工厂模式
    Maven安装与配置
    IDEA: 遇到问题Error during artifact deployment. See server log for details.详解
    IntelliJ IDEA 中 右键新建时,选项没有Java class的解决方法和具体解释
    微信内置浏览器和小程序的 User Agent 区别及判断方法
    WAMP 403 Forbidden禁止访问
  • 原文地址:https://www.cnblogs.com/ahuo/p/575651.html
Copyright © 2011-2022 走看看