windows 字符编码总结
Unicode的出现是为了适应软件国际化的需要。Unicode不同于双字节字符集(DBCS)。
一、相关操作函数
1、DBCS使用下面的函数操作字符串:
CharNext——获得后一个字符
CharPrev——获得前一个字符
IsDBCSLeadByte——判断是否为两个字节字符的第一个字节
C++运行期库提供了以"_mbs"开头的一系列的函数操作DBCS。类似的函数有_mbscat等。
2、ANSI字符集是一个美国标准。C++运行期库提供了以"str"开头的一些列的函数操作此字符集。
3、C++运行期库为Unicode字符集提供了一系列以"wcs"开头的函数。
二、对应的数据类型
1、对于ANSI字符定义为char。
2、对于Unicode的字符定义为wchar_t。
三、使用环境
1、首先要说明的是Win98对于Unicode的支持是很微弱的,所以如果要在Win98上运行Unicode编译的程序,可能造成运行错误或者失败。
2、 由于Win2000及以后的OS的内核都是使用Unicode编写的,所以虽然可以在其上运行ANSI编码的程序,但是其运行过程中很多地方都需要将 ANSI转换为Unicode以后,调用Unicode版本的函数,因为这个转换的过程存在所以ANSI的程序运行效率不高。在Win2000上最好使用 Unicode编写程序。
四、编写通用的程序
1、在编程的时候使用TCHAR数据类型,此类型能够根据预编译宏的定义,将其转换为ANSI或者是Unicode。
2、预编译宏_MBCS、_UNICODE和UNICODE。_MBCS是多字节和ANSI字符串的编译宏。此时TCHAR将转换为char。_UNICODE和UNICODE是Unicode编码的预编译宏,TCHAR将转换为wchar_t。
3、_UNICODE和UNICODE与_MBCS不能在编译的时候同时被定义。
4、_UNICODE宏用于C运行期库的头文件,UNICODE宏用于Windows头文件。一般同时定义这两个宏。
五、转换函数
1、Unicode转换为ANSI使用:MultiByteToWideChar。
2、ANSI转换为Unicode使用:WideCharToMultiByte。
宽字符转多字符: size_t wcstombs(char *mbstr, const wchar_t *wcstr, size_t count ); 多字符转宽字符: size_t mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count ); 另:L"ab"是C/C++标准宏,使用上是没有问题的 |
1、client 里有些函数接口需要unicode,这些由于资源也在本地,可以直接使用MultiByteToWideChar或者mbstowcs+setlocale 转换
2、对于需要从 中文client->服务器->韩文client的方式下,在传文本的情况下,需要将文字的语言代码一起传出去,在接受端可以使用指定的代 码,转换。服务器如有必要的话,也可以使用该代码转换,这样就可以在client上同时显示多国语言了
处理LPTSTR或者LPCTSTR 的时候,不要用strlen ,而是要用_tcslen
否则在UNICODE的编译条件下,strlen不能处理 wchar_t*的字符串。
T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不明确表示使用 MBCS,也不明确表示使用 UNICODE。那到底使用哪种字符集?编译的时候才决定
http://hi.baidu.com/c95wl/item/9cbc65627a8b4190c5d249af
http://blog.csdn.net/dongyonghui_1017/article/details/4280205 TCHAR char wchar_t 的区别
http://blog.csdn.net/mujsmj/article/details/4470304 字符编码方式
windows 字符编码总结相关推荐
- Windows字符编码那些事儿
1. visual studio项目中的Character Set设置 vs里的cs设置有三种,NS,Unicode,MBCS,后两种皆是显示设置编译条件,即是向Command Line中添加UNIC ...
- linux windows 字符编码转换,Linux操作系统下汉字编码的转换
因为项目的需要linux下将GBK编码转换为utf8编码,google一下,网上的相关资源比较少,下面的操作经过本人的反复试验.本例子同样适用于其他的编码转换. 有gbk到utf8的转换过程,需要经过 ...
- Windows核心编程(3)字符编码详解
一.字符编码 详细介绍 1.字节(Byte)是一种计量单位,他是计算机信息技术存储容量的一种单位 2.字符的意义: 字符数计算机文字中使用的文字和符号,比如1,2,3,4,~,@,!,%,^等待 3. ...
- 【转】刨根究底字符编码之十六——Windows记事本的诡异怪事:微软为什么跟联通有仇?
1. 当用一个软件(比如Windows记事本或Notepad++)打开一个文本文件时,它要做的第一件事是确定这个文本文件究竟是使用哪种编码方式保存的,以便于该软件对其正确解码,否则将显示为乱码. 一般 ...
- QTCreator中字符编码问题以及WINDOWS API A/W两种版本的说明
首先说明下windows中API有两种结尾的一种以A结尾一种以W结尾, A代表ANSI编码,W代表UTF-16编码, 这里承清下unicode不是编码方式, 而是字符集. ANSI编码对于不同的国家 ...
- Windows 7 中文版命令行如何修改字符编码为UTF-8?
Windows 7 中文版命令行如何修改字符编码为UTF-8? CMD 之后,命令行有时候无法显示中文,是乱码,于是我右键查看了编码,是GBK编码.如何修改为UTF-8 如果要更改为 UTF-8,则需 ...
- Windows编程01_应用程序分类,开发工具和库,第一个Windows程序,字符编码
01 Windows应用程序分类 1.应用程序分类 控制台程序Console DOS程序,本身没有窗口,通过Windows DOS窗口执行(借的的操作系统的窗口) 窗口程序 拥有自己的窗口,可以与用户 ...
- Windows程序中的字符编码
我们在使用和安装Windows程序时,有时会看到以"2052"."1033"这些数字为名的文件夹(如Office),这些数字似乎和字符集有关,但它们究竟是什么意 ...
- 谈谈Windows程序中的字符编码
sourece:http://www.fmddlmyy.cn/text7.html 谈谈Windows程序中的字符编码 写这篇文章的起因是这么一个问题:我们在使用和安装Windows程序时,有时会看到 ...
最新文章
- 快速上手的Glide4.x教程
- 每日一皮:我靠,这个分枝真的merge回主干了!
- Microsoft SQL Server 2008技术内幕:T-SQL查询---------查询优化
- 基类的构造函数也可以被继承_「C++ Primer plus 心得」13.类继承
- 在android studio中创建Hello-JNI工程
- 程序员的职业病(职业素养)之一:动手写业务代码之前先考虑异常处理
- NOI2019省选模拟赛 第三场
- 基于JAVA+SpringMVC+Mybatis+MYSQL的电费用电管理系统
- APP下载页面(支持微信扫一扫)
- H264 帧、pps 、sps
- Can't create new folder in windows7
- Mirth Connect 互联互通 第五章 查询发送者通道
- couchbase php,轻松搞定|将PHP和Couchbase应用部署为Docker
- 加拿大高中课程计算机科学,加拿大高中课程
- 自动驾驶哪国强?各国和地区自动驾驶成熟度指数 | 自动驾驶系列
- 最早的即时通讯软件哪一个,你知道吗?
- 基于深度学习的时间序列分类[含代码]
- Android-APK瘦身实践
- 如何使用matlab进行频域分析
- linuxprobe
热门文章
- mysql的连接池配置文件,数据库连接池/配置文件数据库连接池
- 解决Linq.ToDictionary()时的键重复问题
- php如何安装源码包,php源码包安装步骤是什么
- 鸿蒙os 2.0跑分,预装鸿蒙 OS 2.0!华为 MatePad Pro2 跑分曝光:麒麟 9000、8GB 内存
- Android Google Map APIKey申请
- JAVA提取字符串信息中的数字(包括整数,小数)工具类
- 一张图读懂MVC设计模式,从用户发起请求到获取响应,应用内部到底是如何数据流转、业务串联的
- 算法学习--二叉查找树
- 网站建设页面设计中CSS正确书写
- linux内核配置重置,linux内核配置--Boot options