Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Visual Studio将所有文件保存为UTF-8,而不在项目或解决方案级别进行签名? 我试图用一个可以在GLinux中编译GCC的方式来配置VS C++项目。似乎我需要将文件编码为UTF-8而不带签名(这不是默认值)。是否可以在项目或解决方案级别设置一些内容,以便在有人打开解决方案并保存其更改后,文件仍然是UTF-8_C++_Visual Studio_Encoding - Fatal编程技术网

如何使Visual Studio将所有文件保存为UTF-8,而不在项目或解决方案级别进行签名? 我试图用一个可以在GLinux中编译GCC的方式来配置VS C++项目。似乎我需要将文件编码为UTF-8而不带签名(这不是默认值)。是否可以在项目或解决方案级别设置一些内容,以便在有人打开解决方案并保存其更改后,文件仍然是UTF-8

如何使Visual Studio将所有文件保存为UTF-8,而不在项目或解决方案级别进行签名? 我试图用一个可以在GLinux中编译GCC的方式来配置VS C++项目。似乎我需要将文件编码为UTF-8而不带签名(这不是默认值)。是否可以在项目或解决方案级别设置一些内容,以便在有人打开解决方案并保存其更改后,文件仍然是UTF-8,c++,visual-studio,encoding,C++,Visual Studio,Encoding,请注意,这是一个开放项目,所以我不能要求每个人都更改他们的Visual Studio设置。这似乎不是一个可以放入propertyPage的设置。我能想到的最好办法是创建一个简单的脚本(如中所示),作为预构建步骤运行并重新写入文件。只要脚本保留在项目中,这可能就可以完成任务,但可能会非常烦人。Visual Studio将通过“另存为”删除BOM表。。。选择“编码保存…”并选择“不带签名的UTF-8”。一旦在没有BOM表的情况下保存,VS将不会再次添加它。不幸的是,没有办法为VS中的所有文件设置此默

请注意,这是一个开放项目,所以我不能要求每个人都更改他们的Visual Studio设置。

这似乎不是一个可以放入propertyPage的设置。我能想到的最好办法是创建一个简单的脚本(如中所示),作为预构建步骤运行并重新写入文件。只要脚本保留在项目中,这可能就可以完成任务,但可能会非常烦人。

Visual Studio将通过“另存为”删除BOM表。。。选择“编码保存…”并选择“不带签名的UTF-8”。一旦在没有BOM表的情况下保存,VS将不会再次添加它。不幸的是,没有办法为VS中的所有文件设置此默认值,必须在每次首次保存文件时手动执行

如果已安装Cygwin,则可以使用以下小脚本批量修改现有文件:

find . -name "*.cpp" -exec vim -c "set nobomb" -c wq! {} \;
或者,如果您没有Cygwin,但有vim,则可以使用此批处理脚本

for %%f in (*.cpp) do call vim -c "set nobomb" -c wq! %%f

注意,在批处理脚本中执行此操作时,似乎每次vim退出时我都需要点击[return],这与cygwin版本不同。

在vs2010中可以全局设置-请参阅:


我在mo只有vs express,当然没有这个。唉。

似乎Visual Studio正在根据文件内容猜测字符编码。如果在每个文件中放置一个标准的注释头,并让该注释包含一个明确的UTF-8字符,那么VS应该做正确的事情。另一个好处是,一些Linux实用程序也会将文件识别为明确的UTF-8。

我这样做的方式:

  • 使用记事本编写了一个调用静默进程的小应用程序。在shell中简单地处理 (使用系统诊断)
  • 创建文件列表和foreach文件,打开并保存为utf-8
  • 写1花了20分钟。还有几分钟的执行时间。

    我想不起手动打开和保存所有300个文件

    我假设这是一个cr/lf vs cr问题,如果是这样,另一种方法可能是更改您的Linux makefile,使其成为构建的一部分的源文件。。。或者您可以重新配置源代码管理以提取适当的行尾。cr/lf vs cr很好,它是文件的实际编码(即文件中的前两个字节,然后是每秒钟一个字节-因为它似乎是utf-16)。我在Linux中尝试了第一个,得到了
    find:missing argument to
    -exec'`第二个(同样在Linux中)给出错误:
    bash:$i:dimensional redirect
    是的,不要做第二个(我现在从帖子中删除了它)。我从未真正尝试过它,我只是在其他地方看到它,它看起来不错。我错过了第一个上的
    \;
    (我以前在这个问题上使用过),现在已修复。如果VS能够记住它曾经在没有BOM表的情况下保存过该文件,则它必须将信息存储在某个位置。打开一个文件,用编码保存它,关闭VS,然后查看文件的修改时间。其中一个文件应该已更新,您可以在其中查看文件是如何标记的。@标记,VS不记得了任何关于它如何保存文件的信息(至少我不知道)。它只是不会更改现有文件的编码(因此脚本会在VS之外批量修改编码)。最好共享你的应用程序代码,为那些正在寻找解决方案的人节省20分钟。