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 ...
随机推荐
- 062——VUE中vue-router之命名视图的实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- openshift rhc
Microsoft Windows [Version 6.1.7601]Copyright (c) 2009 Microsoft Corporation. All rights reserved. C ...
- JS之Fetch
细节叙述见以下链接:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch 1 基本概念: WindowOrWo ...
- auto类型说明符的注意事项
1.auto类型说明符,是C++11标准下的,它能让编译器自行判断表达式的类型. 2.auto也能在一条语句上声明多个变量,但是,该语句上的多个变量的类型,必须一致. 3.编译器推断出来auto类型可 ...
- WebStrom 多项目展示及vuejs插件安装
2. Vuejs 插件安装: ① ②
- HDU 3546
http://acm.hdu.edu.cn/showproblem.php?pid=3546 题意:10个寄存器初值为1,有加乘赋值运算,最多30w次运算,大数最多5000位,问最后10个寄存器的结果 ...
- ListBox 控件单击事件
XAML: <ListBox x:Name="ItemBox" Grid.Column="0" Tap="ItemBox_Tap"&g ...
- David Silver 强化学习原理 (中文版 链接)
教程的在线视频链接: http://www.bilibili.com/video/av9831889/ 全部视频链接: https://space.bilibili.com/74997410/vide ...
- Vec3b类型数据确定颜色通道
前言 这几天实习生测试一张图像的三个通道分别是什么颜色,使用的是Vec3b类型,然后发现了一个有意思的点.. 测试过程 先创建了一定大小的数据, Mat test( , , CV_8UC3, Scal ...
- NSObject之二
前面一章我们整理了NSObject类,这一章我们来看看NSObject协议的内容. NSObject协议提供了一组方法作为Objective-C对象的基础.其实我们对照一个NSObject类和NSOb ...