文章目录
  1. 1. 文件编码
  2. 2. 工程编码
  3. 3. 文件编码与工程编码一致
  4. 4. 一般怎么用

最近忙着项目上的事,遇到的很多问题都没来得及总结,趁最近有个空隙赶紧总结下。本文主要讲的是使用VS写C++代码中遇到的一些编码问题。

文件编码

有时候我们在别人的工程里加个文件,结果发现别人的文件都是Unicode,而我们加的是GBK编码,用别的工具打开,重新保存为Unicode的也不行。当然,因为VS有自己设置编码格式的地方。

打开需要调整编码的文件 –> FILE –>Advanced Save Options...–> 选择你需要的编码方式(搞定)

工程编码

这个经常用VS的同学都知道,在GeneralCharacter Set里有下面几种编码:

  • Use Unicode Character Set
  • Use Multi-Byte Character Set
  • No Set

这个设置主要就是系统API的区别,比如一个创建文件夹的函数CreateDirectory,在Unicode下默认就是CreateDirectoryWMulti-Byte下默认就是CreateDirectoryA

至于No SetMulti-Byte Character Set作用几乎一样,不同的是Multi-Byte Character Set定义了宏_MBCS,但据说这是历史遗留问题,目前没有发现这二者有什么明显的区别。

文件编码与工程编码一致

这个不一定,当然一致是最好的,不过二者没有明显关系,浏览器工程就是文件GBK存储Character SetUnicode Character Set。这里需要注意的是,你在文件里定义的一些变量,比如:
std::string str = "编码"
这个str在工程里直接使用是没有问题,但是如果你想把str转成宽字符串(或者其他与代码页相关的操作),这时就要注意了,如果直接在代码里定义的变量,要根据文件的存储方式选择code page,比如文件是GBK的我们就需要使用CP_Ansi(这里默认中文系统,ansi即gbk)。

一般怎么用

理论上,如果没有特殊字符的要求,文件就用系统默认的编码,Character SetMulti-Byte Character Set即可。但是Character Set还是建议大家都用Unicode,这样更通用,要不可能会在一些特殊环境(比如你用的GBK,用户是日文环境)出现乱码。至于文件编码,能满足你的需求就好。

文章目录
  1. 1. 文件编码
  2. 2. 工程编码
  3. 3. 文件编码与工程编码一致
  4. 4. 一般怎么用