لا يتم تحميل ملف مشروع Visual Studio 2008 بسبب تغيير الترميز غير المتوقع

StackOverflow https://stackoverflow.com/questions/2498959

سؤال

في فريقنا ، لدينا مشروع قاعدة بيانات في Visual Studio 2008 والذي يخضع لمصدر التحكم بواسطة Team Foundation Server. كل أسبوعين أو نحو ذلك ، بعد قيام أحد زملاء العمل بتسجيل الدخول ، لن يتم تحميل ملف المشروع على آلات المطورين الأخرى. رسالة الخطأ هي:

لا يمكن تحميل ملف المشروع. البيانات على مستوى الجذر غير صالح. السطر 1 ، الموضع 1.

عندما أنظر إلى ملف المشروع في Notepad ++ ، يبدو الملف هكذا:

��<NUL?NULxNULmNULlNUL NULvNULeNULrNULsNULiNULoNULnNUL ...

وهكذا (يمكنك أن ترى <?xml version في هذا) في حين يشبه ملف المشروع العادي:

<?xml version="1.0" encoding="utf-16"?> ...

لذلك ربما يكون هناك خطأ ما في ترميز الملف. هذه مشكلة بالنسبة لنا لأنه من المستحيل الحصول على ملف ترميز الملف مرة أخرى. "الحل" هو التخلص من ملف المشروع الحصول على آخر نسخة عمل من التحكم في المصدر.

وفقًا للملف ، يجب أن يكون الترميز UTF-16. وفقًا لـ Notepad ++ ، فإن الملف التالف هو في الواقع UTF-8.

أسئلتي هي:

  • لماذا يعبّر Visual Studio ترميز ملف المشروع ، على ما يبدو في أوقات عشوائية وآلات عشوائية؟
  • ماذا يجب أن نفعل لمنع هذا؟
  • عندما يحدث ذلك ، هل هناك إمكانية لاستعادة الملف الحالي في الترميز الصحيح بدلاً من سحب إصدار أقدم من عنصر تحكم المصدر؟

كملاحظة أخيرة: المشكلة هي مع ملف مشروع واحد ، جميع ملفات المشروع الأخرى لا تعرض هذه المشكلة.

تحديث: بفضل اقتراح جون سكيت ، لدي إجابة على السؤال الثالث. عندما أقوم باستبدال أول تسعة بايت EF BB BF EF BF BD EF BF BD بواسطة البايتين FF FE ، سيتم تحميل ملف المشروع مرة أخرى.

هذا يترك لا يزال السؤال لماذا يفسد Visual Studio الملف.

هل كانت مفيدة؟

المحلول

أعتقد أنه يمكنني تقديم بعض نظرة ثاقبة ما هى يحدث ، إن لم يكن السبب.

FF FE هو بوم; ؛ يشير وجوده في بداية الملف إلى أن ترميز الملف هو UTF-16 ، Little-endian. ويبدو أن الملف الأصلي هو UTF-16 حقًا ، ولكن هناك شيء ما يتجاهل BOM وقراءته كما لو كان UTF-8.

عندما يحدث ذلك ، كل من البايتات FF و FE يعامل على أنه غير صالح وتحويل إليه U+FFFD, ، الشخصية الرسمية Unicode Garbage. ثم ، عندما يتم كتابة النص إلى ملف مرة أخرى ، يتم تحويل كل حرف من أحرف القمامة إلى ترميز UTF-8 (EF BF BD) و ال UTF-8 bom (EF BB BFيضاف أمامهم ، مما أدى إلى تسعة بايت التي أبلغت عنها:

EF BB BF  # UTF-8 BOM
EF BF BD  # U+FFFD in UTF-8
EF BF BD  # ditto

إذا كان هذا هو الحال ، فما عليك سوى استبدال تلك البايتات التسعة FF FE غير آمن. ليس هناك ما يضمن أن هذه هي البايتات الوحيدة في الملف الذي سيكون غير صالح عند تفسيره على أنه UTF-8. طالما أن الملف يحتوي على أحرف ASCII فقط ، فأنت بخير ، ولكن أي شيء آخر ، مثل الأحرف المعلنة (é) أو اقتباسات مجعد () ، سوف يكون مشوشا بشكل لا يعادل.

هل من المفترض حقًا أن تكون ملفات المشروع UTF-16؟ إذا لم يكن الأمر كذلك ، فربما يقوم نظام المطورين بإنشاء UTF-16 عندما يتوقع نظام التحكم في الإصدار UTF-8. ألاحظ في تثبيت الخاص بي Visual C# Express هناك خيار تحت Environment->Documents يسمى "حفظ المستندات كوحدة Unicode عندما لا يمكن حفظ البيانات في codepage". هذا يبدو وكأنه شيء يمكن أن يتسبب في تغيير الترميز في أوقات عشوائية على ما يبدو.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top