`
yydy1983
  • 浏览: 47671 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

UNICODE 编程入门(1)

阅读更多

UNICODE 编程入门
简介

    如果你编写的程序是针对非英语国家的用户,如中国、日本、东欧和中东地区,那么你一定要熟悉 UNICODE 字符集。尤其是用 Visual C++/MFC 编写针对上述国家和地区的用户的程序时,如果你想让自己的应用程序得到更广泛的用户,那么必须考虑代码 UNICODE 的兼容性,也就是说它既在 ASCII 模式下运行 ,也能在UNICODE 模式下运行。本文将介绍 UNICODE 的一些基本编程知识,澄清很多人(包括我自己)在这个问题上存在的模糊认识。对于任何使用 Visual C++ / MFC 编程的人来说,这篇文章肯定值得一读。

UNICODE到底是什么?

     UNICODE 是目前用来解决 ASCII 256 个字符限制问题的一种比较流行的解决方案。大家知道,ASCII 字符集只有256个字符,用 0-255 之间的数字来表示。包括大小写字母、数字以及少数特殊字符;如标点符号、货币符号等。对于大多数拉丁语言来说,这些字符已经够用。但是,许多亚洲和东方语言所用的字符远远不止256个字符。有些超过千个。人们为了突破 ASCII 码字符数的限制,试图用一种简单的方法来针对超过256个字符的语言编写计算机程序。于是 UNICODE 应运而生。UNICODE 通过用双字节来表示一个字符,从而在更大范围内将数字代码映射到多种语言的字符集。

Visual C++的解决方案

    
作为软件开发人员,如何熟练有效地使用 UNICODE 呢?如果你正在用 Visual C++ 编写程序,UNICODE 兼容性意味着你的程序是否具有国际化特征,也就是说你的应用程序是针对本地市场还是国际市场。一旦你作出了决定,那么就得在代码中实现具体细节。好在 Visual C++ 提供了很多内建功能来支持 UNICODE,在创建工程时就可以利用 Visual C++ 提供的这些功能。在产生应用程序框架代码之前,AppWizard 允许开发人员决定是否支持 UNICODEWin32 SDK 包含有一些数据类型遵循 UNICODE 编码规则,MFC 以宏的形式提供了将一般文本转换成 UNICODE 数据类型的途径。开发人员只需要稍微改变一下编写代码的习惯便可以轻松编写支持 UNICODE 的应用。

字符串

     C 程序员一般是用 char 关键字象下面这样来声明一个字符串数组:

       char str[100];       

象下面这样声明函数原形:

       void strcpy( char *out, char *in );        


为了将上面的声明改成支持双字节的 UNICODE 字符集,可以用下面的方法:

       wchar_t str[100];        

或者

       void wcscpy( wchar_t *out, wchar_t *in );        

    此外,微软还提供一种通过预处理指令来实现 UNICODE。每当用 Visual C++ 创建新工程时,只要确定是否支持另外一种字符集,则 AppWizard 将会在头文件中插入预处理指令。这些指令告诉编译器程序想要支持何种字符集。这样在使用VC++提供的通用数据类型时,编译器将用相应的数据类型把通用数据类型替换成所需要支持的字符集。这样很容易将代码重新编译成支持其它字符集的程序。
    
为了在 Visual C++ 6.0 中激活 UNICODE 标准,可以这样做:打开工程文件后,从主菜单中选择“Project | Settings”打开工程设置对话框 => 然后选择“C/C++”标签 => “Preprocessor definitions”编辑框中添加 UNICODE 或者 _UNICODE 预处理宏指令。如图一所示:


图一 Project Settings 对话框

注意这里的 UNICODE _UNICODE 有什么区别呢?前者没有下划线,专门用于 Windows 头文件;后者有一个前缀下划线,专门用于 C 运行时头文件。
在代码中,凡是用关键字 char  的地方都用 TCHAR 取代;凡是用 char * 的地方都用 LPTSTR 取代;凡是定义在双引号中的字符串常量(如"VCKBASE Online Journal")都用 TEXT 宏重写:

       TEXT("VCKBASE Online Journal");       

TEXT 宏的主要作用是当定义了 UNICODE/_UNICODE 预处理指令时,字符串被标志为双字节字符串,否则字符串被标示为 ANSI 字符串。TEXT 的定义如下:

      TEXT(

           LPTSTR string // ANSI 或者 Unicode 字符串

      );

      参数   string 为字符串指针,指向被解释的 Unicode 或者 ANSI 字符串

在文档中 微软提供了包括通用类型在内的几种数据类型都与 ASCII UNICODE兼容。这一点可以参考微软在线文档有关通用数据类型和数据类型的章节。

分享到:
评论

相关推荐

    Python快速编程入门的课后习题答案(本人原创,通过测试完整准确)

    "Python快速编程入门的课后习题答案" Python 是一种高级的、解释性的编程语言,具有简单易学、开源、高级语言、可移植性、解释性、面向对象、可扩展性、丰富的库、规范的代码等特点。 Python 可以应用在 web 应用...

    win32编程入门程序

    win32编程入门程序 包括:自定义消息 定时器 使用资源(图标,光标,菜单,对话框) 键盘消息响应 后备缓冲区 说明:需自建工作空间,并在建好之后在属性->配置属性->常规->项目默认值->字符集 选择"使用Unicode...

    com编程入门(值得收藏)

    COM编程入门是一个面向初学者的主题,旨在帮助程序员理解并开始使用Component Object Model(COM)这一核心技术。COM是微软开发的一种二进制接口标准,它允许不同应用程序之间共享和交互对象,不受特定编程语言的...

    Windows编程入门——字节跳动.pptx

    Windows 编程入门 Windows 编程入门是指使用微软的 Windows 操作系统进行软件开发的入门指南。本指南涵盖了 Windows 编程的基本理论、开发工具和框架、 Demo 实战等方面的知识点。 Windows 操作系统 Windows 操作...

    COM编程入门篇.doc

    1. **接口**:接口在COM中扮演着关键角色,它定义了一组方法,这些方法构成了组件对外提供的服务。接口通常以大写字母I开头,如IShellLink。接口是纯虚函数的集合,类似于C++中的抽象基类,但它不支持多继承,而是...

    API编程入门指导.pdf

    ### API编程入门:掌握Windows数据类型与宏定义 在IT行业,尤其是软件开发领域,**API(Application Programming Interface)编程**是一项核心技能。API作为不同软件组件之间通信的桥梁,其重要性不言而喻。本文...

    Windows编程入门知道书

    【Windows编程入门知道书】 Windows编程对于初学者来说可能显得有些复杂,但通过这本指导书,你可以逐步熟悉这个领域。首先,你需要了解操作系统的基本概念,尤其是Windows操作系统的核心组成部分。操作系统(OS)...

    易语言读Unicode模块

    易语言是一种基于中文的编程语言,它以简明的语法和直观的编程界面为特点,旨在降低编程入门难度。在处理字符编码时,易语言原生支持的是ANSI编码,对于Unicode这种更广泛的字符集支持相对有限。"易语言读Unicode...

    windows驱动编程入门

    总之,Windows驱动编程要求开发者对`UNICODE_STRING`等内核结构有深入理解,并熟练使用`Rtl`系列函数进行字符串操作。理解这些基础知识对于避免驱动开发中的常见错误至关重要,也是编写安全、稳定驱动程序的前提。

    c语言编程入门.docx

    C语言编程入门是计算机科学的基础,它是一种强大的、低级别的编程语言,被广泛用于系统开发、嵌入式系统以及各种应用程序。C语言以其简洁、高效和可移植性著称,是许多现代编程语言的基石。 在C语言编程中,了解...

    0 c语言编程入门

    C语言编程入门是学习计算机科学的基础,它是一种高级程序设计语言,被广泛应用于系统开发、软件工程、嵌入式系统等多个领域。C语言简洁、高效,允许直接操作内存,因此理解计算机内存的工作原理对掌握C语言至关重要...

    Windows编程入门—.zip

    这个名为“Windows编程入门”的压缩包资源可能是一个引导初学者踏入Windows API和应用程序开发的教程。它包含了一个名为"Windows编程入门——字节跳动.pptx"的PPT文件,很可能是由字节跳动公司提供的一个教学材料,...

    c语言编程入门.pdf

    C语言编程入门是学习计算机编程的基础,它涉及到内存管理、数据表示、运算规则以及编码标准等核心概念。在C语言中,对内存的理解至关重要,因为它是程序运行的基础。内存条由大量的电子元器件组成,每个元器件能处于...

    COM编程入门资料COM入门资料

    1. **接口(Interface)**:接口是一组方法的集合,类似于C++中的纯虚函数接口。接口以大写字母"I"开头,如IShellLink。接口可以单继承,但不允许多继承。 2. **组件对象类(CoClass)**:CoClass是实现一个或多个...

    VC++_Win32 编程入门

    标题《VC++_Win32 编程入门》指出了文章的主题是介绍使用C++语言进行Windows编程的初学者入门指南,且仅覆盖Win32 API编程部分,不涉及MFC(Microsoft Foundation Classes)框架。Win32 API是Windows操作系统提供的...

    windows+SDK编程入门介绍共49页.pdf.zip

    本资料"windows+SDK编程入门介绍共49页.pdf.zip"显然是一个关于Windows SDK编程初学者的教程,旨在帮助开发者快速理解和掌握Windows SDK的基本用法和核心概念。 在Windows SDK编程中,以下几个关键知识点是入门阶段...

    COM编程入门篇

    COM编程入门 COM,全称为Component Object Model,是一种组件对象模型,是微软提出的一种跨应用程序和编程语言的二进制代码共享机制。COM的核心思想是促进代码的重用,避免源码级别的重用带来的局限性,如C++中的...

    Python快速编程入门教程

    1. **易学性**:Python语法清晰,非常适合初学者入门,而且有大量的学习资源和社区支持。 2. **可读性**:Python代码的结构清晰,遵循一定的编码规范,使得代码易于理解和维护。 3. **可维护性**:Python代码的模块...

Global site tag (gtag.js) - Google Analytics