在我們的團隊中,我們在Visual Studio 2008中有一個由Team Foundation Server進行源代碼控制的數據庫項目。每兩週左右,在一位同事簽入後,項目文件將不會加載到其他開發人員計算機上。錯誤消息是:Visual Studio 2008項目文件因爲意外的編碼更改而無法加載
項目文件無法加載。根級別的數據無效。 1號線,位置1
當我看到在記事本項目文件++,這個文件看起來是這樣的:
��<NUL?NULxNULmNULlNUL NULvNULeNULrNULsNULiNULoNULnNUL
...
等(你可以在此看到<?xml version
) 而一個正常的項目文件看起來像:
<?xml version="1.0" encoding="utf-16"?>
...
所以大概什麼是錯與ENC編碼文件。這對我們來說是一個問題,因爲它不可能再次獲得正確的文件編碼。 '解決方案'是扔掉項目文件,從源代碼管理中獲取最新的工作版本。
根據該文件,編碼應該是UTF-16。根據記事本++,損壞的文件實際上是UTF-8。
我的問題是:
- 爲什麼Visual Studio中搞亂了編碼 項目文件, 顯然在隨機時間,並在 隨機計算機?
- 我們該怎麼做才能防止這種情況?
- 當它發生時,是否有 恢復當前 文件的正確編碼,而不是 拉動 源代碼控制的舊版本?
作爲最後一個提示:問題是一個單獨的項目文件,所有其他項目文件不公開此問題。
更新:感謝Jon Skeet的建議,我對第三個問題有了答案。 當我用兩個字節FF FE替換前9個字節EF BB BF BF BF BD EF BF BD時,項目文件將再次加載。
這仍然是Visual Studio破壞文件的原因。
如果您在破損文件和工作文件之間進行二進制比較,您會看到什麼?我不知道這是否是一個UTF-16排序問題。 – 2010-03-23 10:14:08
如果我做了一個二進制比較,結果證明這些文件是indentical,除了正確的一個在開始時有兩個額外的字節FF FE,並且已損壞的一個有額外的九個字節EF BB BF EF BF BF BD BF BD。 – Xenan 2010-03-23 10:38:58