在Visual Studio自动生成的项目中,碰见了一件关于文件编码的问题,集中在类似于以下的语句上:

DASLog (DASProtWarn, L"(%s)消息超时,进入慢循环召唤模式。", GetHierarchyName());

  编译时会出现以下错误:

 error C2001:常量中有换行符

该错误的原因很显然是文件编码的问题,在网上搜索了一下,找到了如下解决办法:

(1)全部用英文编码,不要用中文

(2)偶数中文 或 结尾加英文的符号,如"."

(3)将文件编码进行一个手动(如记事本)转换,改成UTF-8格式

我采用了第二种方式,直接将末尾的中文“。”改成了英文的“.”,该错误就解决了!

至于该问题的详细原因,参考一位网友的分析说明(引用:http://www.cnblogs.com/cocos2d-x/archive/2012/02/26/2368873.html):

有个叫wva的人遇到过类似问题,他向微软提交了此bug
http://connect.microsoft.com/VisualStudio/feedback/details/341454/compile-error-with-source-file-containing-utf8-strings-in-cjk-system-locale
根据Visual C++ Compiler Team员工的解释:
The compiler when faced with a source file that does not have a BOM the compiler reads ahead a certain distance into the file to see if it can detect any Unicode characters - it specifically looks for UTF- and UTF-16BE - if it doesn't find either then it assumes that it has MBCS. I suspect that in this case that in this case it falls back to MBCS and this is what is causing the problem.
看见了吧,对于那些没有BOM的文件设计就是这样的。从语气上看,他们编译器小组也不打算修改设计。所以呢,在VC上使用“无签名的UTF-”编码的文件,你就是在抱着一颗不定时炸弹玩耍。因为你永远都不敢确定哪些词能通过编译,哪些不能! 如果要硬编码字符串,即便是字符编码转换也不一定能帮不上你。一旦你为此增加了字符编码转换的代码,那么也意味着可移植性降低了。因为这从根本上是编译器决定的。

Visual Studio error C2001:常量中有换行符(解决办法)的更多相关文章

  1. 关于 error C2001: 常量中有换行符

    看过之后,还是有所收获的,先mark一下 原链接: http://www.cnblogs.com/cocos2d-x/archive/2012/02/26/2368873.html#commentfo ...

  2. Qt5_vs2013_error_C2001: 常量中有换行符__资料

    ZC: Win7x64 + Qt551(x86) + vs2013(x86) ZC: 问题:UTF-8 在源码文件中有中文时,有时会报编译错误:C2001 & C2143 分析: --> ...

  3. Qt5_vs2013_error_C2001: 常量中有换行符__ZC

    ZC: 这里是解决 Windows平台下的这个 编译error :“error C2001: 常量中有换行符”. ZC: 我现在(20161221)的处理方式:vs2010或vs2015 将cpp文件 ...

  4. Qt && 常量中有换行符 && 中文

    [1]VS + QT开发环境,中文内容编译时提示错误error C2001:常量中有换行符 解决方案:VC的编译器,把代码格式改为带BOM的UTF8就好了 建议步骤: (1)用Notepad++打开c ...

  5. VS2017.常量中有换行符

    1.VS中加入 “/utf-8” Qt中 也是加入“/utf-8”,加的地方注意下:在 pro文件中 ,这个位置加入: win32-msvc*:QMAKE_CXXFLAGS += /wd"4 ...

  6. QT Creator有中文出现“常量中有换行符 ”的解决办法

    QT Creator有中文出现“常量中有换行符 ”的解决办法 QT Creator在QT5.9下报错“常量中有换行符 ”,我的代码中有中文,而且在Windows 10下用微软VS编译器编译.造成这个报 ...

  7. Visual Studio无法查找或打开 PDB 文件解决办法

    Visual Studio无法查找或打开 PDB 文件解决办法 用VS调试程序时,有时会在VS底部的“输出”框中提示“无法查找或打开 PDB 文件”.这该怎么解决呢? 下面,我们以VS2013为例,来 ...

  8. 应对 Visual Stdio 编译时出现错误:常量中有换行符

    笔者最近用 Visual Stdio 时,发现一个问题,在某一次写完语言进行编绎运行时,出现了以下错误: C2001错误:变量中有换行符 C2413错误:语法错误 缺少")"(在& ...

  9. Visual Studio 2010 更新NuGet Package Manager出错解决办法

    在Visual Studio 2010的扩展管理器中发现NuGet Package Manger有最新版本更新提示,选择更新安装提示以下错误信息: 2013/4/25 1:11:48 - Micros ...

随机推荐

  1. Navicat 的使用(二)

    一,navicat如何写sql语句查询? 方法1:ctrl+q就会弹出一个sql输入窗口,就可以在里面写sql了.写完sql后,直接ctrl+r就执行sql了. 还有一点,写sql语句时,navica ...

  2. Windows10安装MongoDB

    环境:Windows10x64,mongodb-win32-x86_64-2008plus-ssl-3.2.9-signed.msi 步骤: 安装msi文件到D:\ 新建配置文件mongo.confi ...

  3. 基于centOS6.7搭建LAMP(httpd-2.4.18+mysql-5.5.47+php-5.6.16)环境

    首先确保系统可以联网.设置IP地址以及虚拟机安装linux在此略过.本文采用centos6.7 64位minimal版.php5.6.16.httpd-2.4.18.mysql-5.5.47版搭建la ...

  4. 英文论文中i.e.,e.g.,etc.,viz.的简要小结

    英文论文中i.e.,e.g.,etc.,viz.的简要小结 看了一堆用法,全白扯,自己总结的最好记,最实用 i.e. =即.换句话说.也就是说."'In essence' or 'in ot ...

  5. css隔行换色

    .tab1 tr:nth-of-type(odd){ background:#eeeeee;} .tab1 tr:nth-of-type(even){ background:#f8f8f8;} .ta ...

  6. Window 中安装python多版本环境

    由于python 3 已是目前稳定,且是将来版本版本.新学者可以直接从python3入手学习.但是目前还有很多企业级应用使用的是python 2,可能还得要维护.所以,我们在本地windows中可以安 ...

  7. Java中hashCode的作用

    转  http://blog.csdn.net/fenglibing/article/details/8905007 Java中hashCode的作用 2013-05-09 13:54 64351人阅 ...

  8. mysql 插入/更新数据

    mysql 插入/更新数据 INSERT 语句 1.一次性列出全部字段的值,例如: INSERT INTO student VALUES('Chenqi','M', 29); INSERT INTO ...

  9. SQL JOINS

  10. Orchard源码分析(7.1):Routing(路由)相关

    概述 关于ASP.NET MVC中路由有两个基本核心作用,一是通过Http请求中的Url参数等信息获取路由数据(RouteData),路由数据包含了area.controller.action的名称等 ...