zoukankan      html  css  js  c++  java
  • ANSI和UNICODE编程的注意事项

    建立UNICODE编码工程

        在VC60下,默认方式下建立的是ANSI编码的工程(注:编译的exe内部,其资源字符是以UNICODE保存),建立UNICODE编码工程的方法:

    1、为工程添加UNICODE和_UNICODE预处理选项。
      
      具体步骤:打开[工程]->[设置…]对话框,在C/C++标签对话框的“预处理程序定义”中去除_MBCS,加上_UNICODE,UNICODE。(注意中间用逗号隔开)。

      在没有定义UNICODE和_UNICODE前,所有函数和类型都默认使用ANSI的版本;在定义了UNICODE和_UNICODE之后,所有的MFC类和Windows API都变成了宽字节版本了。

    2、设置程序入口点

      因为MFC应用程序有针对Unicode专用的程序入口点,我们要设置entry point。否则就会出现连接错误。

      设置entry point的方法是:打开[工程]->[设置…]对话框,在Link页的Category:Output类别的Entry Point里填上wWinMainCRTStartup。

    程序员的几个注意事项

    1、用THCAR代替char

    2、字符串加_T(""),如_T("你好")

    3、用_tcscpy等代替strcpy等

        ANSI操作函数以str开头,如strcpy(),strcat(),strlen();

        Unicode操作函数以wcs开头,如wcscpy,wcscpy(),wcslen();

        ANSI/Unicode互为兼容的操作函数以_tcs开头 _tcscpy(C运行期库);

        ANSI/Unicode互为兼容的操作函数以lstr开头 lstrcpy(Windows函数);

        考虑ANSI和Unicode的兼容,我们需要使用以_tcs开头或lstr开头的通用字符串操作函数。

    这样,你在ANSI/UNICODE环境下编译时,可以不修改代码。

    ANSI/UNICODE下的字符转换和其它

        1、在ANSI下,如果程序本身产生的字符(串),如在代码中直接赋值的CString str = _T("你好"),不需要转换,但是,字符(串)是从其它地方来的,如读取UNICODE编码的文件,通信接收的UNICODE数据,则需要转换,转换使用上面两个函数。

        2、同理,在UNICODE下,如果程序本身产生的字符(串),如在代码中直接赋值的CString str = _T("你好"),不需要转换,但是,字符(串)是从其它地方来的,如读取ANSI编码的文件,通信接收的ANSI数据,则需要转换,转换使用上面两个函数。

        3、不管是ANSI,还是UNICODE,在资源中的字符串,如String Table中的、对话框的静态文本,都不需要转换,因为它们编译后是以UNICODE保存在.exe中的。

        对话框上的汉字,只要是简繁同形的,同一个.exe运行在简体Windows和繁体Windows下都可以正常显示,当然两者必须要有对应的字体(库),都用System字体是可以的,或者简体Windows下用“宋体”,繁体Windows下用“新細明體”。简体的“中”和繁体的“中”字体相同,是简繁同形,简体的“国”和繁体的“國”字形不同,是简繁异形。

        4、另外,同一个字符串在ANSI和UNICODE下计数个数不同。如“123你好”,在ANSI下是7个字符,在UNICODE下是5个字符。使用CString 的.GetLength()时要特别注意。

  • 相关阅读:
    常用连链接命令行存储小工具
    switch case 跳转表
    抖音越狱版本App下载
    AutoLayout + UILabel布局
    ReplayKit2 有线投屏项目-反向Socket实现
    ReplayKit2 有线投屏项目总结
    直播相关-搭建直播流服务器nodejs
    难过!失眠!
    CAShapeLayer
    WebService相关概念介绍
  • 原文地址:https://www.cnblogs.com/Dageking/p/3767087.html
Copyright © 2011-2022 走看看