解决 “warning C4819: 该文件包含不能在当前代码页 (936) 中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失” 的问题

from–https://my.oschina.net/krysl/blog/3160083

 

2020 年 4 月 22 日 07:48 更新

最近发现了个新玩意儿 CL 环境变量
设置环境变量 CL 为 /source-charset:utf-8 即可

2020 年 1 月 19 日 18:02

最近在编译 dart-sdk 里的 boringssl 时遇到以下错误
warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
之前是靠把所有几十个源文件全部手动从 ansi 改为 Unicode 的撒币方法,虽然有效,但是太麻烦,还破坏了 git 代码版本,非常糟糕

几分钟前百度搜索 “修改 cl.exe 默认使用 utf8” 时,垃圾百度显示的都是毫无关系的东西,简直令人想拿刀把李彦宏扌甬死,不过他也算干了件好事,如果没有把杂七杂八的没啥关系的搜索结果列出来,特别是把百度经验 “win10 设置系统默认编码为 utf-8” 这个自家东西排到第一名位置,我也就想不到试试这个方法了。

经过试验,把 win10 设置系统默认编码为 utf-8 之后,就不报错了。真是皆大欢喜。

随便推测了下,VS 的这个编译器可能应该或许是从系统设置里获取了默认的编码,系统原来是 gbk (CP936),改成 utf8 后,编译器就自动从 936 改成 utf8 的方式来默认处理代码了。

鉴于百度谷歌上都搜不到我这方法(至少两三页内没看到),我便在这里分享给大家,希望能帮大家解决问题。

又去看了下,该百度经验提示:

win10 系统支持默认编码修改.。

  • 好处:
  1. 解决由 utf8 引起的 cmd,powershell 等乱码问题
  2. Visual Studio 2017 (其他版本没试过) 新建文件则默认为 utf8
  3. 其他
  • 可能的坏处:
  1. 上古版本的第三方应用软件可能会出现乱码。
  2. 由于此设置,微软官方特别说明为【beta 版】(截至时间 2020 年 1 月 19 日),可能会引起其他未知问题,请充分考虑后再决定是否设置。

我再多测测,如果有其他问题,我会在这里记录。

软件环境:
win10 专业版,版本号 1909,操作系统版本 18363.592
VS2019 社区版

在 “win10 设置系统默认编码为 utf-8” 后

  • cmder 中文显示异常,中文会显示为重复显示。比如(“中文测试” 会显示为 “中中文文测测试试”),必须修改 cmd.exe 为 “使用旧版控制台”,(应该是新版 cmd 里的一个 API 有问题)
  • Visual Studio 里的终端输出有中文乱码,暂时没找到完全解决的方法

所以我把文章标题里 “完美解决……” 里的 “完美” 删了,在相关一系列软件能完美解决 UTF8 中文乱码问题前,修改系统默认编码为 UTF-8 不太可取。 推荐大家在编译完出问题的代码之后,还是把系统默认编码改回去,省心省力

后记
最后还是选择加了个 /utf-8 的编译选项,每次改系统编码太麻烦了

上一篇
下一篇