环境:Windows 上使用 vs
总是遇到那种定义一个中文字符串std::string = "你好";(不一定是这段中文),然后 vs 就编译报错“常量中有换行符”。
我看了网上的文章,大概意思就是会收到这三个的影响:
- 源文件本身的编码格式
- /source-charset
- /execution-charset
我理解一下,就是:
- 源文件里面的二进制,是根据源文件本身的编码格式来存的。
- 比如\x45\xAB 这两个字节存在源码文件的某个位置上,然后根据source-charset的那种编码格式进行映射,把 \x45\xAB(文件中的存储的字节) <===> 字符 a ,
- 然后,根据execution-charset的那种编码方式进行映射,字符 a <===> 某几个字节(内存中的存储的字节) ,因为最终你这个字符串要保存到内存中,所以现在就确定下来内存中这个字符串到底存储的哪几个字节。
不知道我上面的流程理解对不对?(我觉得流程理解清楚,这个问题也就好解决了)
而且想再问一下,解决“常量中有换行符”的最佳方案:
- 正常情况只有一个人写代码的话,应该让这三个因素保持为 什么?
- 现在我集成别人的 c++代码,他的文件编码格式全是 gb2312 (里面还有中文字符串常量),弄得我有点难搞。