2010-11-09 70 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應該(希望)可以糾正該錯誤。

如果繼續在這之後發生的事情,讓我知道,我們可以嘗試追查是什麼原因導致他們要創建/放在首位保存這樣。