24

我最近通过我的 VS2010 看到了以下警告。

警告 21 警告 C4819:文件包含当前代码页 (936) 中无法表示的字符。以 Unicode 格式保存文件以防止数据丢失

c:\boost\vs2010_boost1.49\include\boost\format\alt_sstream_impl.hpp 1

基于MSDN,该文件包含一个必须以 unicode 格式保存的字符。

问题:我自己没有接触这些文件。有没有办法可以找到这些字符并手动更正。换句话说,我不想以 unicode 格式保存源文件。

谢谢

4

5 回答 5

51

您可以使用Notepad++使用正则表达式查找文件中的所有 Unicode 字符:

  1. 在记事本++中打开您的文件。
  2. 确保从“编码”菜单中选择UTF-8 。
  3. 打开搜索框(使用CTRL-F或转到搜索菜单并选择查找...)。
  4. 在搜索模式下,选择正则表达式的单选按钮。
  5. [^\x00-\x7F]在“查找内容”框中输入内容,然后单击“查找下一个”按钮以查看您得到的内容。

找到 Unicode 字符后,您可以删除/更改它们,将编码更改回 ANSI,然后保存文件。

当然,您不必使用 Notepad++。RegEx 将在其他文本编辑器中工作,例如Sublime Text

于 2012-05-08T15:41:23.710 回答
6

我在我的项目中遇到了这个问题,并试图修改所有非 unicode 字符。但是我不得不放弃并找到了另一种方法,因为有太多文件存在这样的问题(即使它们都在评论中)。

然后我找到了一种通过设置“系统区域设置”来解决此问题的快速方法。

Control Panel -> Clock,Language,and Region -> Region and Language -> 
Administrative -> Language for non-Unicode programs -> Change system locale -> English

如果您的“系统语言环境”不是英语,我认为这可以解决您的问题。

https://stackoverflow.com/a/37871883/3148107

于 2016-06-17T01:54:52.603 回答
3

您可以在 Visual Studio 中使用上面显示的正则表达式来定位这些字符。这是正则表达式:[^\x00-\x7F]

于 2017-08-24T22:10:34.390 回答
2

在第 176 行:

BOOST_ASSERT(0); // §27.4.3.2 allows undefined-behaviour here

你看,上面一行的 27 之前有一个字符。

于 2013-03-07T03:24:42.447 回答
1

基本上,您可能已经编译了一个以另一个字符集编码的文件,该字符集不是您操作系统的默认字符集。一种方法是删除那些无法通过默认编码解码的字符,但我更喜欢另一种方法,即使用 Notepad++ 对文件进行转码。要实现此目标,请单击Encoding->Convert To xxx,其中 xxx 是您的操作系统默认编码。

于 2019-11-16T13:06:20.507 回答