引言

今天迁移开发环境的时候遇到一个问题,同样的操作系统和 Visual Studio 版本,原始开发环境一切正常,但是迁移后 VS 出现了 C4819 告警,上网查了中文的一些博客,大部分涵盖几种解决方案:

  • 修改工程文件或者源文件,禁用该告警
  • 修改文件内容,避免使用非法字符
  • 将文件重新以 Unicode 格式保存

这些方案都不适用于我的问题,我并不想修改这些产生告警的头文件,因为这并不是我负责的模块,同时也并一定就是源文件的问题。

问题调研

不得已还是搜索了微软的官方文档,找到关于 C4819 告警的定义如下:

Compiler Warning (level 1) C4819

The file contains a character that cannot be represented in the current code page (number). Save the file in Unicode format to prevent data loss.

出现 C4819 的原因

当编译 ANSI 源文件时,系统使用了无法显示所有字符的 codepage。

消除该告警的完整解决方案:

  • 如果你不需要的话,可以移除非法字符,比如注释
  • 使用 Unicode escape sequences 来创建只包含基本 ANSI 字符的文件
  • 将文件重新以 Unicode 格式保存
  • 在控制面板中设置 codepage 以支持源文件中非法的字符集

关于什么是 Unicode escape sequences 可以参考 https://dencode.com/en/string/unicode-escape

关于如何用 Unicode 格式保存文件可以参考原文,链接在文末。

问题解决

对于我不想修改源文件的情况,只能通过修改系统的 codepage 来解决,以英文操作系统为例,中文系统可以对照修改:

  • 打开 Control Panel
  • 选择 Region (and Language)
  • 选择 Administrative 页签
  • 在 Language for non-Unicode programs 区域点击 "Change System Locale" 按钮
  • 设置 Current system locale,比如 English (United States)。
  • 点击 "OK" 保存。

重新编译代码,确认问题已经解决。

引用

关于编译告警 C4819 的完整解决方案 - The file contains a character that cannot be represented in the current code page (number). Save the file in Unicode format to prevent data loss.的更多相关文章

  1. error C2220: warning treated as error - no 'object' file generated warning C4819: The file contains a character that cannot be represented in the current code page (936).

    用Visual Studio2015 编译时,遇到如下编译错误: error C2220: warning treated as error - no 'object' file generated ...

  2. WebAPI2使用AutoFac依赖注入完整解决方案。

    WebApi2上进行依赖注入,在百度里能搜到的的完整解决方案的文章少之又少,缺胳膊断腿. 和MVC5依赖注入的不同之处,并且需要注意的地方,标记在注释当中.上Global代码: namespace S ...

  3. C/S应用升级更新完整解决方案

    年末福利,C/S应用升级更新完整解决方案放送 程序员,工作累寿命短,大家应该学会分享,别浪费有限的生命与健康做重复的事情. C/S方式实现的应用有个升级更新功能是必需的,以前整过一个但是没考虑多套C/ ...

  4. 利用JFreeChart绘制股票K线图完整解决方案

    http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) ...

  5. g++编译后中文显示乱码解决方案(c++)

    g++编译后中文显示乱码解决方案   环境:Windows 10 专业版 GCC版本:5.3.0 测试代码: 1 #include <iostream> 2 using namespace ...

  6. java ant 编译打包build.xml完整配置范例

    java ant 编译打包build.xml完整配置范例 <?xml version="1.0" encoding="UTF-8" ?> <p ...

  7. XP局域网访问无权限、不能互相访问问题的完整解决方案

    XP局域网访问无权限问题的完整解决方案: 1:用管理员账户登录系统 2:在“开始”-- “运行”里输入 GPEDIT.MSC 目的是打开组策略选项 3:依次展开”WINDOWS设置”-”本地策略”-” ...

  8. 国产芯片任重道远 国科微SSD主控芯片的“追赶之路”(不能只提供一颗芯片,而是要将芯片、国密算法、固件Firmware、BIOS和操作系统紧密联系在一起,变成完整解决方案交给行业用户,才能真正体现自身的价值)

    集微网消息,“中国芯”战略之路道阻且长,踏入这个赛道的攻坚者们需要十年如一日的技术突破,需要集合产业势能,共同协作,方能建立中国核心技术真正的竞争力. 国产化之路任重道远,SSD芯片初见成效 信息时代 ...

  9. 注意由双大括号匿名类引起的serialVersionUID编译告警

    问题描述 最近版本组织清理编译告警,其中有这么一条比较有意思,之前没见过,拿出来说一说 "serializable class anonymous com.demo.Main$1 has n ...

  10. 手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践

      本文主要讲解了如何把ABP官方的在线生成解决方案运行起来,并说明了解决方案中项目间的依赖关系.然后手动实践了如何从0搭建了一个简化的解决方案.ABP官方的在线生成解决方案源码下载参考[3],手动搭 ...

随机推荐

  1. 京东:Flink SQL 优化实战

    简介: 本文着重从 shuffle.join 方式的选择.对象重用.UDF 重用等方面介绍了京东在 Flink SQL 任务方面做的优化措施. 本文作者为京东算法服务部的张颖和段学浩,并由 Apach ...

  2. [Mobi] Android Studio NDK 安装

    通过 SDK Manager - SDK Tools 中勾选 NDK 进行安装. 注意,下载来源是 dl.google.com,请准备好能连接到国际互联网. 下载完成后在 sdk 工具里面可以看到 n ...

  3. WPF 让窗口激活作为前台最上层窗口的方法

    在 WPF 中,如果想要使用代码控制,让某个窗口作为当前用户的输入的逻辑焦点的窗口,也就是在当前用户活动的窗口的最上层窗口,默认使用 Activate 方法,通过这个方法在大部分设备都可以做到激活窗口 ...

  4. docker.from_env() 获取docker守护进程时出现 TypeError: load_config() got an unexpected keyword argument 'config_dict' 异常

    某天使用python重启docker容器时,出现了一个令人费解的BUG,我的代码为 1 def restart_docker(container_name): 2 # 连接到docker守护进程 3 ...

  5. Node.js 万字教程

    0. 基础概念 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,使用了一个事件驱动.非阻塞式 I/O 模型,让 JavaScript 运行在服务端的开发平台. ...

  6. Competition Set - 2023杭电多校

    关于代码太多导致太卡然后发现刚好可以放下HDU多校这回事. 那就稍微加点经历吧.team316. 第十场 今天发挥还行. 上来开03,一发过.然后做09,感觉就不难,过之.发现11是数学题,干,想了2 ...

  7. 五:瑞芯微RV1109

    瑞芯微RV1109是一款用于工控机或人工智能视觉应用的高性能机器视觉处理器SoC. 参考资料 http://www.neardi.com/news_22/434.html https://www.ro ...

  8. 特工17Agent17汉化版游戏破解金币方法修改破解金币的增加方法

    又是一个renpy游戏,昨晚搞了半个小时搞定的,其实这个游戏要赚钱也不难,就是点点点就可以了,但是我觉得还是挺费劲的,因为好多道具都很贵,攒钱又不怎么容易,花钱的地方还挺多的,所以干脆不如直接破解了算 ...

  9. vue路由跳转的三种方式

    目录 1.router-link [实现跳转最简单的方法] 2.this.$router.push({ path:'/user'}) 3.this.$router.replace{path:'/' } ...

  10. SpringBoot 二维码生成

    一.基于Google开发工具包ZXing生成二维码 1.引入需要的依赖 <!-- zxing生成二维码 --> <dependency> <groupId>com. ...