VS中的编码问题
最近忙着项目上的事,遇到的很多问题都没来得及总结,趁最近有个空隙赶紧总结下。本文主要讲的是使用VS写C++代码
中遇到的一些编码问题。
文件编码
有时候我们在别人的工程里加个文件,结果发现别人的文件都是Unicode
,而我们加的是GBK
编码,用别的工具打开,重新保存为Unicode
的也不行。当然,因为VS
有自己设置编码格式的地方。
打开
需要调整编码的文件 –>FILE
–>Advanced Save Options...
–> 选择你需要的编码方式
(搞定)
工程编码
这个经常用VS的同学都知道,在General
的Character Set
里有下面几种编码:
- Use Unicode Character Set
- Use Multi-Byte Character Set
- No Set
这个设置主要就是系统API
的区别,比如一个创建文件夹的函数CreateDirectory
,在Unicode
下默认就是CreateDirectoryW
,Multi-Byte
下默认就是CreateDirectoryA
。
至于No Set
和Multi-Byte Character Set
作用几乎一样,不同的是Multi-Byte Character Set
定义了宏_MBCS
,但据说这是历史遗留问题,目前没有发现这二者有什么明显的区别。
文件编码与工程编码一致
这个不一定,当然一致是最好的,不过二者没有明显关系,浏览器工程就是文件GBK存储
而Character Set
是Unicode Character Set
。这里需要注意的是,你在文件里定义的一些变量,比如:std::string str = "编码"
这个str
在工程里直接使用是没有问题,但是如果你想把str
转成宽字符串(或者其他与代码页相关的操作),这时就要注意了,如果直接在代码里定义的变量,要根据文件的存储方式选择code page
,比如文件是GBK
的我们就需要使用CP_Ansi
(这里默认中文系统,ansi即gbk)。
一般怎么用
理论上,如果没有特殊字符的要求,文件就用系统默认的编码,Character Set
用Multi-Byte Character Set
即可。但是Character Set
还是建议大家都用Unicode
,这样更通用,要不可能会在一些特殊环境(比如你用的GBK,用户是日文环境)出现乱码。至于文件编码,能满足你的需求就好。