首页 CMS教程 正文内容

常量中有换行符(常量中有换行符怎么解决vs2010)

36模板 2023-11-09 11:11:47 CMS教程 922 0

常量中有换行符(常量中有换行符怎么解决vs2010)

1、最近用2019写++时候发现一个问题,在代码中直接写中文,有一部分汉字会报错,提示“常量中有换行符”。解决方法一搜就有了,因为文件编码是-8,所以在编译选项里面加一个/-8就能解决。

2、你也可以说中文不能这么写,要用宽字符之类的。当然解决问题不是这篇文章的重点,我们需要搞清楚为什么有这个报错。环境是:文件使用-8编码,用2019自带的编译器,不做任何编译选项的设置。首先说一下已知的几种情况:代码(“世”)会报错“常量中有换行符”。

3、在“世”后面加一个半角空格,错误提示没了,但是会提示警告“该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为格式以防止数据丢失”。在“世”后面加一个全角空格,错误提示没了,警告也没了。

4、为了更好地分析问题,我们把这三个字符数组打印出来。这三种情况都是有编码问题,总的来说,问题在于认为的编码和文件实际的编码不一致,导致解析的结果不对。在默认情况下是用系统编码,在简体中文的10系统中,默认编码就是,所以,默认把文件当做编码读入,然后导致了这几种情况。

5、的编码规则是:双字节表示,总体编码范围为08140-0,首字节在081-0之间,尾字节在040-0之间,剔除07一条线。下面对表格中几种情况的解释:。

常量中有换行符(常量中有换行符怎么解决vs2010)

1、情况1,读取前两个字节048,认为这是一个字符“涓”,然后读取096,这个字节在的首字节范围(081-0)之内,所以认为这是个双字节汉字,后面还有一个字节。但是接着就读取到了引号,这个字符串已经结束,这不符合的编码规则,所以编译出错。情况2,在1的情况下读取096之后,期待读入编码的尾字节(040-0),但是接下来读取到的020不在这个范围内,这不是个合法的字符,所以把第一个字节096强制改为03,即编码的问号,然后丢弃第二个字节020,继续编译,提示一个警告表示编码有问题。情况3,在1的情况下读取096之后,期待读入编码的尾字节(040-0),然后读取到03,认为这两个字节是的汉字‘栥’。

2、之后的两个字节,认为这是字符‘€’,至于080如何映射到这个符号,可以参考的1252编码,最后遇到引号,所以这是个合法的字符串,直接把读取到的字节原样放到数组里面,没有任何报错。这样分析以后,其实可以对情况3下结论了。为了不让编译报错,最后加全角空格是一种比较取巧的做法,只是因为全角空格的第一个字节03能和前一个字节能组成合法的汉字。从的编码规则看,其实后面接上任意的编码在040-0之间的字符,都能通过编译且不提示任何报错,比如‘’,‘’,但是‘1’就不行。

3、当然我们要明确问题在哪,这是编码设置的错,直接修改编译选项就能解决问题,这种取巧的方法没多少实用价值。针对编码,有专门的编译选项/-和/-,前者表示文件本身的编码,后者表示编译以后的字符数组内的字节是什么编码,编码问题基本可以用这两个选项解决。

4、比如,的控制台默认只能显示编码,但是代码文件本身是-8,因为跨平台的缘故,又不方便直接修改成,当然这里就不包括为不同平台写编码转换代码这种办法。在10上,可以设置这两个编译选项为/-:-8/-:,表示让编译器以-8编码读入,然后转为保存在数组里面,这样直接就能在控制台上正常显示汉字。此外,在最近公开了红警1的部分代码,这个代码的编码是代码页850的,我们通过微软的文档找到这个编码叫做850,所以用编译选项/-:850/-:850,就能解决编码问题。

5、当然这样修改以后还是只能编译,不方便编辑文件,最根本的解决办法是只能麻烦一点,把文件转成-8编码,这样编译和编辑都没问题。

欢迎 发表评论:

请填写验证码
x