MFC基础--C++中的字符集(转自MSDN)http://msdn.microsoft.com/zh-cn/library/06b9yaeb(v=vs.90).

为国际市场开发应用程序的一个重要方面就是要适当地表示本地字符集。ASCII 字符集在 0x00 到 0x7F 的范围内定义字符。还有其他一些字符集(主要是欧洲字符),它们在 0x00 到 0x7F 的范围内定义与 ASCII 字符集相同的字符,还在 0x80 到 0xFF 的范围内定义了扩展字符集。因此,8 位的单字节字符集 (SBCS) 足以表示 ASCII 字符集以及许多欧洲语言的字符集。但是,一些非欧洲字符集(如日文汉字)包含许多单字节代码方案无法表示的字符,因此要求使用多字节字符集 (MBCS) 编码。

Unicode 和 MBCS

    

为支持国际编程,启用了 Microsoft 基础类库 (MFC)、Visual C++ 的 C 运行时库和 Visual C++ 开发环境。它们:

  • 在 Windows 2000(以前为 Windows NT)上提供对 Unicode 标准的支持。

    Unicode 是为所有语言提供足够编码的 16 位字符编码。所有 ASCII 字符都作为“加宽”字符包含在 Unicode 中。

    说明:

    Windows 95、Windows 98 或 Windows Millennium Edition 上不支持 Unicode 标准。

  • 在所有平台上,支持称为双字节字符集 (DBCS) 的多字节字符集 (MBCS) 形式。

    DBCS 字符由一个或两个字节构成。某些范围的字节留出用作“前导字节”。前导字节指定由它和后面的“尾字节”构成单个双字节宽字符。必须清楚哪些字节是前导字 节。在某个多字节字符集内,前导字节位于某个特定范围内,尾字节也一样。当这两种范围重叠时,可能需要计算上下文以确定某个给定的字节是用作前导字节还是 尾字节。

  • 对简化 MBCS 编程的工具提供支持(MBCS 编程用于为国际市场编写的应用程序)。

    当在支持 MBCS 的 Windows 操作系统版本上运行时,Visual C++ 开发系统(包括集成的源代码编辑器、调试器和命令行工具)完全支持 MBCS。有关更多信息,请参见 Visual C++ 中的 MBCS 支持

  • 说明:

    在本文档中,MBCS 用于描述所有对多字节字符的非 Unicode 支持。在 Visual C++ 中,MBCS 始终是指 DBCS。不支持比两个字节宽的字符集。

    按照定义,ASCII 字符集是所有多字节字符集的子集。在许多多字节字符集中,0x00 到 0x7F 范围内的每个字符都与 ASCII 字符集中具有相同值的字符相同。例如,在 ASCII 和 MBCS 字符串中,单字节 NULL 字符(“\0”)的值都是 0x00 并且指示终止空字符。

国际支持

大多数传统的 C 和 C++ 代码采用不适用于国际应用程序的字符和字符串操作。虽然 MFC 和运行时库都支持 Unicode 或 MBCS,但您仍需要亲自做一些工作。为指导您,本节解释 Visual C++ 中“国际支持”的含义:

  • 通过 MFC 函数参数列表和返回类型中的可移植数据类型来支持 Unicode 和 MBCS。根据您的版本是否定义了 _UNICODE 符号或 _MBCS(即 DBCS)符号,按条件用合适的方式来定义这些类型。根据您的版本定义的符号(即这两个符号中的一个),MFC 库的不同变量自动与应用程序链接。
  • 类库代码使用可移植的运行时函数和其他方法来确保正确的 Unicode 或 MBCS 行为。
  • 您仍必须在代码中处理特定类型的国际化任务:
    • 使用相同的可移植运行时函数,使 MFC 在任一环境下可移植。
    • 使用 _T 宏使字符串和字符在任一环境下可移植。有关更多信息,请参见 Tchar.h 中的一般文本映射
    • 在 MBCS 下分析字符串时有一些注意事项。而在 Unicode 下分析字符串时则不需要注意这些事项。有关更多信息,请参见 MBCS 编程提示
    • 在应用程序中混合使用 ANSI(8 位)和 Unicode(16 位)字符时要小心。可以在程序的某些部分使用 ANSI 字符,而在其他部分使用 Unicode 字符,但不能在同一字符串中混合使用这两种字符。
    • 在应用程序中不要硬编码字符串。而应通过将它们添加到应用程序的 .rc 文件使其成为 STRINGTABLE 资源。然后就可以在不必更改或重新编译源代码的情况下本地化应用程序。有关 STRINGTABLE 资源的更多信息,请参见 字符串编辑器
说明:

欧洲和 MBCS 字符集的某些字符(如重音字母)的字符代码大于 0x80。由于大多数代码使用有符号字符,因此这些大于 0x80 的代码在转换为 int 时是带符号扩展的。这对数组索引是个问题,因为如果带符号扩展的字符为负值,则索引将超出数组范围。使用 MBCS(如日语)的语言也很独特。由于一个字符可能由单字节或双字节组成,因此应始终同时处理两个字节。

MFC基础--C++中的字符集(转自MSDN)http://msdn.microsoft.com/zh-cn/library/06b9yaeb(v=vs.90).

时间: 2024-08-12 01:26:41

MFC基础--C++中的字符集(转自MSDN)http://msdn.microsoft.com/zh-cn/library/06b9yaeb(v=vs.90).的相关文章

MFC基础程序设计VS2015 最新03

视频教程地址观看:http://pan.baidu.com/s/1mhKQ6kK 一.数字(浮点数或整数)转为文字:a)如果转为窄字符字符串,sprintf函数很好用,浮点数都没问题:b)如果转为宽字符字符串,在MFC中CString::Format就可以实现了:c)wsprintf是Windows API,不支持浮点型格式输出:d)如果转为宽字符字符串,在WIN32中可以先用sprintf转为窄字符字符串:再调用MultiByteToWideChar的API函数转为宽字符字符串.e)_stpr

MFC 基础知识:对话框背景添加图片和按钮Button添加图片

很长时间没有接触MFC相关的知识了,我大概是在大二时候学习的MFC相关知识及图像处理,现在由于要帮个朋友完成个基于C++的程序,所以又回顾了下相关知识.的确,任何知识一段时间过后都比较容易忘记,但回顾起来还是很有印象的. 这篇文章主要是回顾以前的MFC基础知识,给对话框添加背景图片和给按钮button添加背景图片:希望此篇基础性文章对大家有所帮助!同时为下次做MFC相关知识提供点此时所想所感吧.内容比较简单,高手飘过~ 一. 对话框背景添加图片 首先通过VS2012创建MFC对话框应用程序,项目

【MFC】MFC改变对话框中静态文本的字体大小

MFC改变对话框中静态文本的字体大小 2010/08/09 11:30 VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体.对于你的问题,需要首先用CreateFont来建立一个字体对象,然后调用控件的SetFont,就可以了. 例子: 1.改静态文体的ID,如:IDC_STATIC1 2.添加一个Edit控件,建立一个关联的控件m_editControl. 3.在OnInitDialog中添加如下代码: CFont * f; f = new CFont; f->Creat

MFC基础--CString的Tokenize()和_tcstok()的用法对比

Tokenize()和_tcstok()都是用来分割字符串的方法.但是其各自的使用还是有很多不同. 下面对字符串“%s111gdfafd%s\t023232%s\t1%s\t2%s\t3%s\t4%s\t0XFF0000%s\tfdas”用这两个函数都进行一些相同匹配分割处理,代码和结果对比如下: Tokenize(): #include "stdafx.h" #pragma once #include <stdio.h> #include <tchar.h>

MFC基础篇--CString的打印输出

在MFC中经常用到CString类型.也会将其打印到黑窗口上.但是直接用printf或者直接用cout都是不行的. 比如要截取字符串:“bsd_Progress\t0\t1\t2\t3\t4\t0XFF0000\tNil”之“\t”之间的字符串,当然结果为“0”,“1”,“2”,“3”,“4”,“0XFF0000”和"Nil".可是直接用printf输出时候,代码和运行结果如下,并不尽如人意. int _tmain(int argc, _TCHAR* argv[], TCHAR* en

MySQL 5.6中的字符集

这篇文章介绍的是MySQL  5.6中的字符集,基本是我以前学习MySQL 5.6手册时整理而来. 概论 基础概念 字符集(character set)是编码和字符符号的映射集合.排序规则(collation)是用于比较字符集中字符的规则集. 现在我们自定义一个简单的字符集character set.假设我们有一个仅有四个字母的字母表:A.B.a.b.我们给每个字母一个数字:A = 0,B = 1,a = 2,b = 3.字母A是一个字符符号,数字0是A的编码,这四个字母和它们编码的映射就是一个

mfc视类中错误:IntelliSense: declaration is incompatible with。。。解决方案

基本情况是我自己写了一个类: class CDib {....} 然后在mfc自动生成的"工程名Dlg.cpp"中使用类CDib,我的工程名是MfcPictureProcessing,所以类是class CMfcPictureProcessingDlg,下面是视图类.h文件里: class CMfcPictureProcessingDlg: public CDialogEx { ... CDib *Dlgdib; CPalette* CreateBitmapPalette(CDib *

VS2010的MFC对话框程序中添加菜单栏的过程

VS2010的MFC对话框程序中添加菜单栏的过程 最近在看一个用MFC写的界面的项目的代码,在代码和界面中一直没有看到关于菜单控件是如何添加进对话框的,于是就百度了下.结果,与其它控件(Button等)添加的方式不一样: VS2010的MFC对话框程序中添加菜单栏的过程大致分了这五步. 一.将Menu加入Resource视图中 在WorkSpace中的Resource视图下,在左边目录的任意位置上,先右键-->选择Insert Resource(插入资源)选项,在弹出的对话框中选择Menu以后,

在MFC对话框程序中使用加速键

新建一个基于对话框的工程,添加一个按钮,修改按钮ID,这里为ID_BTN_OPENFILE,为按钮添加消息响应事件,这里我打开文件保存对话框: void CAccelDlg::OnBtnOpenfile() { // TODO: Add your control notification handler code here CFileDialog dlg (TRUE); dlg.DoModal (); } 为工程添加一个加速键资源,添加一条,注意ID要和按钮的ID相同,只有这样才能产生关联 为主