2010-11-09 67 views
7

我有Visual Studio 2008中的编码在编译时我得到这样的错误文件的问题:Visual Studio的编码问题

alt text

当我试图打开文件,其中具体的错误occures,编码窗口出现:

alt text

通过defualt侦测自动设置。当我将编码选项更改为UTF-8时,一切正常。如果我使用UTF-8编码在项目中打开每个有问题的文件,则项目开始编译。问题是我有太多的文件,并且打开每个文件并将编码设置为UTF-8是荒谬的。有什么办法可以快速完成这个任务吗?

我的VS设置为:

alt text

我使用Windows Server 2008 R2。

UPDATE:

汉斯帕桑特和诺亚·理查兹。感谢互动。我最近改变了我的操作系统,所以一切都很新鲜。我也从源代码控制下载了新的解决方案。

在操作系统区域设置中我已经改变了系统区域设置为波兰(波兰):

alt text

在VS我已经改变了国际环境,以相同的窗口:

alt text

问题仍未解决。

当我打开使用自动检测编码部分的.cs文件,然后检查文件 - >高级保存选项...,一些本.CS文件的代码页1250:

alt text

但在内部看起来如下:

alt text

它是有线的,因为当我检查源CON这样的特定文件的属性特伦,他们似乎有UTF-8编码集:

alt text

我不明白这种不匹配。

所有其他文件都UTF-8编码:

alt text

和正确打开。我基本上不知道发生了什么问题,因为据我所知,我的朋友与我设置了相同的选项,并且同一个项目正确编译了他。但到目前为止,他很高兴没有遇到编码问题。

+0

你不能有“太多的文件”和之前不会有这个问题。什么改变了?你最近切换到这台机器了吗?系统代码页是否改变?这个项目是从VS2005导入的吗?变成一个吝啬的SCCS?更好地记录你的问题。 – 2010-11-10 02:17:46

回答

2

与抑扬大写字母A告诉我,该文件是UTF-8(如果你用十六进制编辑器,你可能会看到字节C2 A0看)。这是UTF-8的一个非破坏性的空间。因为(最有可能)有没有在文件中足够高的ASCII字符,以帮助可靠的检测

Visual Studio中没有检测到编码。

此外,没有BOM(字节顺序标记)。这将有助于检测(这是“带签名的UTF-8”描述中的“签名”)。

你可以做什么:添加BOM到所有没有一个文件。 如何添加?仅使用BOM创建文件(记事本中的空文件,另存为,选择UTF-8作为编码)。它将是3个字节长(EF BB BF)。 您可以复制,在每个文件的开头是缺少BOM:

copy /b/v BOM.txt + YourFile.cs YourFile_Ok.cs 
    ren YourFile.cs YourFile_Org.cs 
    ren YourFile_Ok.cs YourFile.cs 

确保有BOM文件的名称和原始文件的一个之间的+。

尝试在一个或两个文件,如果它的工作原理,你可以创造一些批处理文件来做到这一点。 或者一个小的C#应用​​程序(因为你是一个C#程序员),它可以检测文件是否已经有一个BOM,所以你不要添加它两次。当然,你可以做到这一点几乎所有的东西,从Perl来PowerShell将C++ :-)

+0

谢谢你,很好的解决方案。但似乎有线,我的朋友没有面临这样的问题,因为我们有相同的操作系统,相同的源文件(来自同一个sc),我认为相同的设置。尽管如此,这个技巧对我有帮助,对未来也是一个很好的建议问候。 – jwaliszko 2010-11-15 09:19:46

0

一旦以UTF-8模式打开文件,您是否可以尝试更改文件的高级保存选项并保存它(如果您认为这些文件应该是UTF-8,则为带有签名的UTF-8) ?

自动检测编码检测是尽力而为的,因此很可能文件中的某些内容导致它被检测为UTF-8以外的内容,例如在文件的第一个千字节中只有ASCII字符或者有一个表明文件不是UTF-8的BOM。将该文件重新保存为带有签名的UTF-8应该(希望)可以纠正该错误。

如果继续在这之后发生的事情,让我知道,我们可以尝试追查是什么原因导致他们要创建/放在首位保存这样。