编程中的多字节和Unicode
在编译许多程序的时候,我们常常会出现诸如指针转换错误或者const char[] 不能转换成XX的错误,这时很可能就是项目编码的问题了,如果您使用的是VS编程环境,那么打开工程属性,里面就有个选项是给你选择采用多字符集还是采用unicode。而对于这两者,我坚定不移的喜欢unicode~
在多字节环境下,系统会按照ASCII字符表中128个字符进行截断操作,由于汉字是占用两个的字节的,所以在即有汉字又有英文的字符串中,该函数只会截断字符串右边英文字符,而对于汉字则无法处理。
而对于Unicode字符集使用两个字节对世界上几乎所有的语言进行编码(0×0000-0xFFFF),它可以表达的字符数量为16位,即65536个字符,每种语言的代码段不同,两个字节所表达的字符是唯一的,所以在该环境下,每一个字符都有唯一的一个编码,那么在进行截断操作时,自然不会出现意料之外的结果。
而我看过好几本有名气的C++的书中,都是说到一个项目或者程序的编码最好都选择Unicode(可是在几本国内出的书里不但没提及,而且提供的源代码也全都是“多字节”的),在此,我并没有鄙视多字节的意思,只是觉得写出通用的,跨语言的代码时候最好采用unicode。
下面这段话是来自MSDN:
要完成应用程序的 Unicode 编程,还必须:
使用 _T 宏有条件地编写字符串的代码,使之可移植到 Unicode。
当传递字符串时,请注意函数参数要求的长度是以字符为单位还是以字节为单位的。如果在使用 Unicode 字符串,这一区别是很重要的。
使用 C 运行时字符串处理函数的可移植版本。
使用以下用于字符和字符指针的数据类型:
TCHAR 这里将使用 char。
LPTSTR 这里将使用 char*。
LPCTSTR 这里将使用 const char*。CString 提供 operator LPCTSTR 来在 CString 和 LPCTSTR 之间进行转换。
CString 还提供识别 Unicode 的构造函数,赋值运算符和比较运算符。
呵呵~补充一点就是使用_T的时候,如果系统提示你它是没有定义的标识符的话,带上atlstr.h就ok了。哈,又是一个笔记~
编程中的多字节和Unicode的更多相关文章
- Windows编程中UNICODE和_UNICODE定义问题
Windows编程中UNICODE和_UNICODE定义问题 先转一篇文章: 初学Windows SDK编程时碰到过这个问题,相信很多初学Windows编程的人也都碰到过,后来慢慢搞明白些了,但有时别 ...
- 解决“在多字节的目标代码页中,没有此Unicode字符可以映射到的字符”
今天在处理Google网站管理员中的500错误时发现这样一些URL: http://www.cnblogs.com/Garnai/tag/3D%3F%96%CA/ http://www.cnblogs ...
- 第28月第21天 记事本Unicode 游戏编程中的人工智能技术
1. Windows平台,有一个最简单的转化方法,就是使用内置的记事本小程序notepad.exe.打开文件后,点击文件菜单中的另存为命令,会跳出一个对话框,在最底部有一个编码的下拉条. 里面有四个选 ...
- VS2010与VS2013中的多字节编码与Unicode编码问题
1. 多字节字符与单字节字符 char与wchar_t 我们知道C++基本数据类型中表示字符的有两种:char.wchar_t. char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因 ...
- 在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符。 (#1113)
报错 在使用MySQL-Front导入sql文件时报错1113:在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符. (#1113) 解决方案 导入.sql文件时,单击 选择文件对话 ...
- 宽字符、多字节、unicode、utf-8、gbk编码转化
今天遇到一个编码的问题,困惑了我很长时间,所以就简要的的了解了一下常用的编码类型. 我们最常见的是assic编码,它是一种单字节编码,对多容纳256个字符. 我们在编程的时候经常遇到unicode,u ...
- VC++编程中常用的字符串转换函数
VC++编程中经常遇到不同编码编码的字符串之间需要转换的情况,以下简单提供几个不同编码字符串之间的转换函数: ANSI 字符串和Unicode字符串之间的转换 //Convert wide char ...
- Visual Studio下Qt编程中对中文的处理
Visual Studio下Qt编程中对中文的处理 本文为原创文章,原文地址http://www.cnblogs.com/c4isr/p/qt_develop_in_vs.html Visual St ...
- PHP编程中10个最常见的错误
PHP是一种非常流行的开源服务器端脚本语言,你在万维网看到的大多数网站都是使用php开发的.本篇经将为大家介绍PHP开发中10个最常见的问题,希望能够对朋友有所帮助. 错误1:foreach循环后留下 ...
随机推荐
- Umbraco Examine Search (Lucene.net) french accent
在项目中使用Umbraco examine search 来search 法语网站时,客户有一个需求,就是 当search expérience 和 experience 时,需要返回一样的结果. ...
- 高性能服务器设计(Jeff Darcy's notes on high-performance server design
高性能服务器设计(Jeff Darcy's notes on high-performance server design 我想通过这篇文章跟大家共享一下我多年来怎样开发“服务器”这类应用的一些想法和 ...
- 基于TMF SID的高可扩展性数据模型
基于TMF SID的高可扩展性数据模型 前言 此文根据TMF SID规范撰写,欢迎大家提出建议和意见. TMF文档版权信息 Copyright © TeleManagement Forum 2013. ...
- 支持Mono的盘古分词(PanGu)
不废话,直接上下载地址http://files.cnblogs.com/files/RainbowInTheSky/PanGu.rar 群友在做项目移植到Mono+jexus上时遇到了问题,盘古分词无 ...
- java线程基础知识----java daemon线程
java线程是一个运用很广泛的重点知识,我们很有必要了解java的daemon线程. 1.首先我们必须清楚的认识到java的线程分为两类: 用户线程和daemon线程 A. 用户线程: 用户线程可以简 ...
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU特性介绍(2)- RT685EVKA性能实测(Dhrystone)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的性能. 在前面的文章 i.MXRTxxx微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2018 ...
- 转:PHP性能:序——谈ab(Apache Bench)压力测试工具
PHP性能:序——谈ab(Apache Bench)压力测试工具 ab(Apache Bench)是啥? ab是Apache自带的一个压力测试软件,可以通过ab命令和选项对某个URL进行压力测试.a ...
- 洛谷P3533 [POI2012]RAN-Rendezvous
P3533 [POI2012]RAN-Rendezvous 题目描述 Byteasar is a ranger who works in the Arrow Cave - a famous rende ...
- bzoj2597: [Wc2007]剪刀石头布(费用流)
传送门 不得不说这思路真是太妙了 考虑能构成三元组很难,那我们考虑不能构成三元组的情况是怎么样 就是说一个三元组$(a,b,c)$,其中$a$赢两场,$b$赢一场,$c$没有赢 所以如果第$i$个人赢 ...
- 记录一下我的三天清明节假期,TP5.1写企业站
在假期前就计划利用这三天时间写一个企业站,包括pc和wap,和微信公众平台 在计划时有些功能没有想好,导致后面踩了不少坑,前期计划一定要尽量做详细,表字段设计也要考虑好,不然后期开始写代码时会需要来回 ...