VS2008项目使用VS2015打开时,出现错误: error CS1012: Too many characters in character literal
VS2008项目使用VS2015打开时,出现错误: error CS1012: Too many characters in character literal
--------------------------------------------------------------------------------------------
把源码文件转换成UTF-8:
Save ***** as.... -> 点击Save 按钮旁边的小黑三角- > Save with Encoding... -> 选择Unicode(UTF-8 with signature) - Codepage 65001 试一试。
--------------------------------------------------------------------------------------------
首先点击文件-〉高级保存选项
然后会出现下面的窗口:
然后 选择UTF-8即可
--------------------------------------------------------------------------------------------
Visual Studio 2015的坑:中文字符串编译后成乱码
(2015年8月5日更新:微软已经修复了Roslyn的这个bug,详见 https://github.com/dotnet/roslyn/pull/4303 )
昨天,我们用VS2015编译了博客程序中的一个程序集并发布上线。
今天有园友反馈向我们反馈,个人博客分页显示随笔列表的页面中,“上一页”“下一页”显示乱码:

而这个地方的“上一页”“下一页”字符串恰恰是在我们昨天发布的程序集中定义的:

public class Pager : Control
{
protected string PreviousText = "上一页";
protected string NextText = "下一页"; //...
}

可是昨天我们并没有更改这部分代码,肯定不是我们昨天代码修改引起的。
于是,我们改用VS2013重新编译了一下这个程序集,更新之后,乱码立马消失。
接着,用ILSpy反编译了VS2015所编译出的程序集的IL代码之后,真相大白:

public class Pager : Control
{
protected string PreviousText = "ÉÏÒ»Ò³";
protected string NextText = "ÏÂÒ»Ò³";
//...
}

原来是VS2015所用的编译器惹的祸,而这个编译器就是大名鼎鼎的 Roslyn 。
大家使用 Visual Studio 2015 时需要注意一下这个问题。
【补充】
用ildasm查看VS2015编译出来的程序集的IL代码(乱码):

.maxstack 2
IL_0000: ldarg.0
IL_0001: ldstr bytearray (C9 00 CF 00 D2 00 BB 00 D2 00 B3 00 )
IL_0006: stfld string BlogServer.Web.Controls.Pager::PreviousText
IL_000b: ldarg.0
IL_000c: ldstr bytearray (CF 00 C2 00 D2 00 BB 00 D2 00 B3 00 )
IL_0011: stfld string BlogServer.Web.Controls.Pager::NextText

用ildasm查看VS2013编译出来的程序集的IL代码(未乱码):

.maxstack 2
IL_0000: ldarg.0
IL_0001: ldstr bytearray (0A 4E 00 4E 75 98 ) // .N.Nu.
IL_0006: stfld string BlogServer.Web.Controls.Pager::PreviousText
IL_000b: ldarg.0
IL_000c: ldstr bytearray (0B 4E 00 4E 75 98 ) // .N.Nu.
IL_0011: stfld string BlogServer.Web.Controls.Pager::NextText

【问题原因与临时解决方法】
在GitHub上提交Issue之后,从回复中得知这个问题与Roslyn检测文件编码的处理方式有关。
查看出现乱码问题的.cs文件编码,发现用的是ANSI编码。于是以UTF-8编码另存该文件,然后用VS2015重新编译,问题解决。
VS2015 RC中没这个问题。
--------------------------------------------------------------------------------------------
VS2008项目使用VS2015打开时,出现错误: error CS1012: Too many characters in character literal的更多相关文章
- 解决未安装unit测试和jest的Vue项目运行karma start时的错误
一.起因 在#单元测试#以karma+mocha+chai 为测试框架的Vue webpack项目(一)文中,说明了是对已有的Vue项目进行测试框架的搭建,并进行测试.但是此项目在利用 vue-cli ...
- centos 7 运行Quartus ii 17.0 标准版,下载程序时遇到错误error (209053): unexpected error in jtag server -- error code 89
对于错误error (209053): unexpected error in jtag server -- error code 89,它产生的原因在于,在linux系统下,Quartus ii的驱 ...
- [开源类库/项目] android保存崩溃时的错误信息log至本地【源码+jar包+使用说...
不知大家是否经常遇到这种情况:自己的项目有时会在没有连接到电脑时发生崩溃,好不容易发现的bug结果连接到电脑时又复现不出来了:又或者自己写的一个功能在开机启动时产生小bug导致崩溃,而刚启动的机器想让 ...
- Eclipse运行Maven的SpringMVC项目Run on Server时出现错误:Error configuring application listener of class org.springframework.web.context.ContextLoaderListener的问题解决
错误: 严重: Error configuring application listener of class org.springframework.web.context.ContextLoade ...
- Yarn init 命令在 Git Bash 中打开时的错误
最近一直在学习一些新的知识,ES5.ES6.Vue等,当然,作为程序,英文的阅读和听写能力也是要去学习的. 最近慕课网上的qbaty大神出了两套视频,分别是webpack和yarn,本着不断学习的精神 ...
- VS2013下开发VC++程序,编译时提示错误error MSB8020: The build tools for v140 (Platform Toolset = 'v140') 的解决方案
1. 问题描述: 提示如下错误:error MSB8020: The builds tools for v140 (Platform Toolset = 'v140') cannot be found ...
- Loadrunner回放https脚本时出现错误Error -27780 Connection reset by peer解决办法
录制好的https协议的web脚本,在脚本回放时会出现Error -27780: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "......&quo ...
- git push 时发生错误 error: src refspec master does not match any. error: failed to push some refs to
很多相关解决办法都是最后要 push 到远端的 master 上,但很多其实要求不能把个人的修改内容直接 push 到 master 主分支. 因此,当我想将本地 feature/work1 分支的修 ...
- qt程序运行时的错误error:undefined reference to `_imp___ZN10QTcpSocketD1Ev'
出现的错误: undefined reference to `_imp___ZN10QTcpSocketD1Ev' undefined reference to `_imp___ZN10QTcpSoc ...
随机推荐
- maven相关资源
http://mvnrepository.com/search?q= http://maven.aliyun.com/nexus/#welcome https://www.w3cschool.cn/m ...
- 疑难en_a
1◆ a æ eɪ ʌ ɑː ə
- for each...in,for...in, for...of
一.for each ...in explanation: 该语句在对象属性的所有值上迭代指定的变量.对于每个不同的属性,执行指定的语句. 句法: for each (variable in obj ...
- [转载]struts1小项目
http://www.blogjava.net/nokiaguy/archive/2009/01/13/251101.html
- L1-014 简单题
这次真的没骗你 —— 这道超级简单的题目没有任何输入. 你只需要在一行中输出事实:This is a simple problem. 就可以了. 输入样例: 无 输出样例: This is a sim ...
- Tomcat服务器启动失败:Could not publish server configuration for Tomcat v8.0 Server at localhost. Multiple Contexts have a path of
在eclipse中使用Tomcat8.0时,出现了如下错误: 解决办法: 在建立Tomcat服务时,eclipse会自动生成一个Servers的项目. 在这个项目中,找到你部署项目的服务文件夹. 在这 ...
- Linux:man命令显示颜色
man命令显示颜色 在.bashrc下添加 export LESS_TERMCAP_mb=$'\E[01;31m' export LESS_TERMCAP_md=$'\E[01;31m' export ...
- Python 动态传参
def chi(zhushi, cai, fushi, tang, tiandian): print(zhushi,cai,fushi,tang,tiandian) chi("大碗大米饭&q ...
- Hashtable实现原理及源码分析
Hashtable简介 和HashMap一样,Hashtable也是一个散列表,存储的内容是键值对(key-value)映射. Hashtable在Java中的定义为: public class Ha ...
- Spring AOP体系学习总结
要理解AOP整体的逻辑需要理解一下Advice,Pointcut,Advisor的概念以及他们的关系. Advice是为Spring Bean提供增强逻辑的接口,提供了多种方法增强的方式,比如前置, ...