VC工程中的字符集工程属性和字符编码

浅谈Python和VC中的编码问题(转) <br />以前编码问题总能让自己凑或蒙过去,最近要做一个项目服务器端用python写,客户端用c++,工程编译的字符集使用UNICODE。之间通过socket进行通信,通信过程中编码转换问题把我搞得晕头转向,逼着我将编码问题好好研究一番。<br /><br /> <br /> <br />首先先谈谈VC中的编码问题,首先编码我们大致可以分为两类:文件编码和内存编码。文件编码即源代码文件的编码,gbk,UTF-8等。内存编码即源代码编译成为二进制文件的时候采用的编码。<br /><br />比如,在VC 2 阅读详情

一工程字符集属性

工程属性里,字符集可以选择“Use Unicode Character Set”和“Use Multi-Byte Character Set”。此选项只控制代码里的API是用宽字符版的还是ANSI字符版的,它控制不了代码里的字符是用Unicode编码还是ANSI编码。


如果选择了“Use Unicode Character Set”,则代码里用到的API被解释为UNICODE版本的API(带标记W的API),如MessageBox被解释为MessageBoxW;
如果选择了“Use Multi-Byte Character Set”,则代码里用到的API被解释为ANSI编码版本的API(带标记A的API),如MessageBox被解释为MessageBoxA。


二字符编码

假设当前OS的字符集为GBK,则:

1 源代码文件里面的字符集

     使用当前OS的字符集GBK保存源程序,如“中”字的编码值为[0xD6,0xD0]。则在源程序的cpp文件中“中”字就是编码值[0xD6,0xD0]的形式保存。


2  运行时字符串变量的字符集

字符变量的字符编码是由操作系统的字符集和前缀L来决定的:

1> 如果字符串常量前面如果有标识L,则无论系统的字符集是什么,被此字符串赋值的变量的内容都是Unicode编码的。编译器会将在cpp文件中以GBK编码保存的“中”字对应的UNICODE编码的值0x4E2D赋值给字符串变量。

2> 如果字符串常量前面没有标识L,那么被此字符串赋值的变量的内容是编译器默认字符集编码方式(VC编译器默认的字符集是操作系统的字符集,此例为GBK)。


运行时,如OS为GBK字符集时,汉字"中"运行时的编码值为:

 

 OS为BIG5字符集时,汉字"中"运行时的编码值为:

这两个对比证明正如第2条所说,没有带L时,赋值的字符串变量的内容是按照当前操作系统的字符集来编码的。


如何修改windows的字符集?通过控制面板里的地区和语言,修改current system locacle即可。


如何查看当前windows的字符集?

打开命令提示符,在标题栏点右键,选择“属性”。
在选项卡的“选项”里会发现:
当前代码页
936 (ANSI/OEM - 简体中文 GBK)



Visual C++编译器常用选项设置 介绍了VC 6编译器常用的设置,是一个较为详细的介绍 立即下载

相关推荐

Java实现双色球&大乐透随机选号算法——原理详解与代码实战

掌握核心语法:集合操作、随机数生成、排序。贴近实际场景:将编程知识应用于生活问题的解决。

wangchl0932的博客 4972

QT使用msvc编译,中文乱码编译不过的解决方案

最近使用QT5.13+VC2015遇到编译错误,和中文乱码问题 实验过程: 1.如果编码是utf-8无bom,在pro中的添加的是 msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8 msvc:QMAKE_CXXFLAGS += -source-charset:utf-8 则编译通过,且运行时中文正常 2.如果编码是utf-8+bom, 在pro中添加, msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8 则编译能通过,

qq_20189555的博客 2421

Linux下离线安装Google Chrome

目录背景一、下载并安装Google Chrome二、下载并安装依赖包1.libvulkan.so.1()(64bit)2.读入数据总结 背景 项目中服务器被要求不能连接外网,不能直接联网安装,所以需要下载Google Chrome安装包和依赖包,然后离线安装。 linux下步骤都一样,不管ubuntu还是centos只是需要下载对应系统的文件包即可。 本机系统:CentOS 7 一、下载并安装Google Chrome 官方下载地址http://www.google.cn/chrome/browser/d

ancientapesman的博客 1万+

C++ 编译器对字符编码的要求和处理方式

http://blog.youkuaiyun.com/dbzhang800/article/details/7540905 长期以来,很多人都清楚,一旦C++源码中直接使用了中文,这样的源码想要跨平台(I18N)会非常困难。 随着: Windows下:MSVC2010成为主流 Linux下:GCC升级到4.6 C++中的中文问题 才算有了一个比较优雅的、跨平台的Workaround。 (本文讨论编译器范围:GCC4.6+, MSVC2010sp1+ 。本文属于QString系列,但暂不涉及QStri

ayang1986的专栏 2940

AD域控设置客户端桌面壁纸

此时再右键wallpaper文件夹,共享选项下的网络路径已经有了。找到该域下的组策略编辑器(第一步有)并按照图下所示找到桌面壁纸的策略设置,点击进去。在高级共享里可以设置共享名和同时共享的用户数量限制。点击下拉箭头,找到Everyone并选择,点击添加后,点击共享。然后可以看到刚才的新建文件夹策略在域控服务器和客户端都生效了。右键wallpaper文件夹->属性,点击共享选项,点击共享。在弹出的窗口里,按照图下所示设置,点击应用并且确认。在弹出的窗口里,按图示找到文件夹,右键新建文件夹。

欲买桂花同载酒的博客 6052

涨薪技术|Kubernetes(k8s)环境部署实战

这两者都是在/etc/docker/daemon.json里修改的,所以我们一起配置了就好了,首先执行下述命令编辑daemon.json:​​​​​​​。安装完成后,可以使用以下命令来查看dashboard访问的端口号​​​​​​​。网络插件CNI也是以容器的方式进行启动​​​​​​​。安装完成后可以检查是否拉取了对应的容器​​​​​​​。再使用以下命令进行安装:​​​​​​​。打开后输入以下内容:​​​​​​​。安装1.19.0版本​​​​​​​。修改IP地址:​​​​​​​。

m0_60889254的博客 1084

关于C++程序的编码问题

我们传统的程序基本都只在Windows或只在Linux下运行,Windows程序使用简体中文GB18030编码,Linux程序则只使用英文。近年来,随着程序的组件化,部分代码特别是公用组件都需要同时支持Windows及Linux平台,这样就出现了不同程度的编码问题,例如在编译时编译器报错,或者在运行时出现乱码。

weixin_42310458的博客 1313

R数据分析:潜在剖面分析LPA的做法与解释

Latent Profile Analysis (LPA) tries to identify clusters of individuals (i.e., latent profiles) based on responses to a series of continuous variables (i.e., indicators). LPA assumes that there are unobserved latent profiles that generate patterns of resp.

Codewar的博客 1万+

深入了解VC++编译器

网上查了许多相关的资料,今天整理一下文章,发布到程序员之家网站上,希望对大家有所帮助。大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先

JohnWeii的专栏 613

Office系列完全干净卸载工具合集(最全)

使用 Microsoft Fix it 卸载 Microsoft Office 套件 一、Windows 7、Windows Vista或Windows XP下卸载Office 1.MicrosoftEasyFix50416 工具用来卸载office 2003 MicrosoftEasyFix50416_Office2003.msi 2.MicrosoftEasyFix50154 工具用来卸载office 2007 MicrosoftEasyFix50154_Office2007.msi 3.Microso

业精于勤,荒于嬉 3万+

软件可靠性测试与评价

本文系统介绍了软件可靠性工程的核心内容,包括可靠性概念、模型分类、测试方法和评价体系。重点解析了可靠性测试的三大步骤:定义运行剖面、设计测试用例和实施测试收集数据,并以智能安防系统为例说明具体应用。可靠性评价需结合业务场景,通过量化指标(MTBF、失效率等)和模型预测持续优化系统。文章强调可靠性需贯穿软件全生命周期,通过闭环反馈实现持续改进,为关键系统提供质量保障。

moton2017的博客 2048

UE5 Niagara基础知识讲解

在UE5版本中,Niagara粒子系统引入了许多可添加的模块,分别用于控制发射器的生成和更新、粒子的生成和更新以及渲染效果。本文采用虚幻5.2.1版本,以图文方式对Niagara基础知识进行讲解。

一碗清深的博客 2468

字符集与字符编码的那些事

字符集与字符编码什么是字符集?字符集有哪些? 字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,需要进行

caowei880123的专栏 2020

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VC++编程中的字符集问题

使用visual studio 进行windows编程时,不可避免会遇到字符集(character set)的问题,VS提供两种字符集,一种是多字节字符集,另一种是unicode字符集。1,多字节字符集,英文字符占1个字节,一个中文字占2个字节,使用_tcslen计算一个中文的字符长度为2;2,Unicode字符集,英文字符占2个字节,一个中文占2个字节,使用_tcslen计算一个中文的字符长度为...

不甘平凡的小鸟的专栏 1459

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

关于VC多字节字符集和unicode宽字符集的使用和问题(转)

C在建一个新的项目时,都是默认Unicode字符集。 字符集不仅涉及编码,还涉及字符字节的物理存储方式,常常成为宽字符unicode字符集和窄字符(gb2312)多字节字符集   UTF-8:   1~3字节可变 UNICODE: 2字节一个字符  单个字符宽度固定。 GB2312:  中文2字节一个字符,字母等1个字节,为多字节字符集。位宽动态变化   例子: “你”字的UTF

dragoo1的专栏 3316

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Unicode与多字节字符集

有关Unicode与多字节字符集的介绍这里不再赘述,摘抄一段话(忘记出处了),说明一下为什么我们需要Unicode。 我们可以在一台机器上阅读多个国家不同语言的文档了,前提是本机必须安装该文档使用的字符集。 操作系统在发布的时候,通常会往机器里预装标准的字符集还有平台专用的字符集,这样只要你的文档是使用标准字符集编写的,通用性就比较高了。 虽然通过使用不同字符集,我们可以在一台机器上

butterflyfly007的专栏 2118

Unicode和多字节字符集 (MBCS)

Unicode和多字节字符集 (MBCS) 杂谈 (2012-05-17 22:39:08) 转载▼     这个估计是很多人曾经头疼过的问题,现在的VC版本基本都支持Unicode和多字节字符集(MBCS),在进行MFC编程时VC的默认设置是unicode字符集。但是我们通常需要做一些代码移植的工作,如果将多字节字符集下的程序代码移植到unicode

u014305097的专栏 764

VS中遇到的 UNICODE和ANSI 编码问题

<br />以前编码问题总能让自己凑或蒙过去,最近要做一个项目服务器端用python写,客户端用c++,工程编译的字符集使用UNICODE。之间通过socket进行通信,通信过程中编码转换问题把我搞得晕头转向,逼着我将编码问题好好研究一番。<br /><br /> <br /> <br />首先先谈谈VC中的编码问题,首先编码我们大致可以分为两类:文件编码和内存编码。文件编码即源代码文件的编码,gbk,UTF-8等。内存编码即源代码编译成为二进制文件的时候采用的编码。<br /><br />比如,在VC 2

guo693的专栏 7787

使用多字节字符集的跨平台(PC、Android、IOS、WP)编码/解码方法

随着移动端的发展,跨平台已成为通讯架构设计的重要考虑因素,PC、Android、IOS、WP等跨多平台间的数据通讯,必然要解决字符编码/解码的问题。 多字节字符集MBCS不是跨平台的首选字符集,面向跨平台、国际化的推荐字符集肯定是UNICODE。 写VC的人都知道,在以前VC++6.0中默认的字符集是多字节字符集,而VS2005及以后默认的字符集是Unicode,VS2013中默认不再对多字节...

weixin_34160277的博客 243

VC6工程升级VS2013汇总

问题1:Building an MFC project for a non-Unicode… Building an MFC project for a non-Unicode character set is deprecated 解决方法: 用于多字节字符编码 (MBCS) 的 MFC 库 (DLL) 不再包含于 Visual Studio 中,但是可用作插件,您可以在任何装有 Visual Studio Professional、Visual Studio Premium 或 Visual St

qq_39136860的博客 1359

由字符集编码引起的错误

在asp.net中由于vs开发环境统一了字符集的编码,所以我们很少碰到字符集造成的错误。但是在我现在的项目中碰到了。我们这个项目通过vss进行源代码管理,我使用vs2008进行开发,我同事使用vs2005进行开发。由于项目时间紧张,页面的美化工作和功能的开发同步进行,美工做完页面美化工作就讲切好的html代码给我们。但是我们在套去css样式表的时候,发现有的样式能够生效,有的样式不能生效。百思不得

Lawrence的专栏 1658

error C2664:char *strcpy(char *,const char *)& 无法将参数 2 从CString&quot转换为const char *,VC6.0转vs2005以后版本

error C2664:char *strcpy(char *,const char *)& 无法将参数 2 从CString&quot转换为const char *,VC6.0转vs2005以后版本解决方法 把strcpy改为_tcscpy 一、VS2010设置Unicode或ASCII字符集问题 VS2010中开发程序时,默认的字符集是Unicode。所以如果程序中使用字符串常量时一定要显示转换为Unicode型,否则编译时报错。如...

Txwtech 2136

VS2013中添加对多字符集的支持

1.问题描述            VS2013中创建的工程默认采用Unicode编码,在使用VS2013编译旧版VC++程序时,经常提示Buildingan MFC project for a non-Unicode character set is deprecated。(VC6.0中工程默认采用对字符集编码) 1>C:\Program Files(x86)\MSBuild\Micro

lbsgrowup的专栏 2523
上一篇: 2014找工作总结-机会往往留给有准备的人
下一篇: 再议字节序-------TCP/IP网络传输相关字节序
nodeathphoenix
博客等级 码龄16年 97粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值