كيفية قراءة ملف المشفرة ANSI التي تحتوي على أحرف خاصة

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

  •  07-07-2019
  •  | 
  •  

سؤال

وأنا أكتب سياسة TFS الإيداع، والذي يتحقق إذا الملفات المصدر لدينا تحتوي على رأس ملفنا.

ومشكلتي هي أن رأس ملفنا يحتوي على حرف خاص "©" وللأسف بعض الملفات المصدر لدينا هي المشفرة في ANSI. حتى إذا قرأت هذه الملفات في السياسة، وسلسلة يشبه هذا "حقوق الطبع والنشر 2009".

string content = File.ReadAllText(pendingChange.LocalItem);

وأنا متعب لتغيير الترميز من السلسلة، ولكنه لا يساعد. فكيف يمكنني قراءة هذه الملفات، أن أحصل على سلسلة الصحيحة "حقوق الطبع والنشر © 2009"؟

وشكرا لمساعدتكم!

والتحيات ENY

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

المحلول

استخدم Encoding.Default:

string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

ويجب أن تكون على علم، مع ذلك، أن الذي يقرأ ذلك باستخدام الترميز الافتراضي للنظام - والتي قد لا تكون هي نفسها كما ترميز الملف. ليس هناك ترميز واحد يسمى ANSI، ولكن عادة عندما يتحدث الناس عن "ترميز ANSI" أنها تعني ويندوز الشفرة 1252 أو أيا كان يحدث مربع لاستخدامها.

سوف

والتعليمات البرمجية تكون أكثر قوة ما اذا كان يمكنك معرفة <م> بالضبط ترميز استخدامها.

نصائح أخرى

ويبدو من المعقول إذا كنت ستكون لدينا مثل هذه السياسات التي عملتم أيضا فريق اتفق ترميز قياسي. أن نكون صادقين، وأنا لا يمكن أن نرى لماذا أي فريق سوف تستخدم ترميز آخر غير "يونيكود (UTF-8 مع توقيع) - مخطط 65001" (ربما باستثناء لصفحات ASPX مع محتوى ثابت كبير غير اللاتينية ولكن حتى ذلك الحين لا أستطيع " ر نرى كيف سيكون صفقة كبيرة لاستخدام UTF-8).

وعلى افتراض انك لا تزال ترغب في السماح ترميزات المختلطة فإنك المقبل في حاجة الى طريقة لتحديد ترميز ملف كان إلا في ذلك يمكنك أن تعرف أي ترميز لتمريرها إلى ReadAllText. ليس من السهل تحديد ذلك من الملف ولكن باستخدام Encoding.Default ومن المرجح أن يعمل حسنا. منذ الأكثر احتمالا لديك فقط 2 ترميزات للتعامل مع وVS (UTF-8 مع توقيع) والترميز ANSI شيوعا من قبلك آلات (ربما ويندوز 1252).

وبالتالي باستخدام

 string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

وسوف يعمل. (كما أرى جون قد نشرت بالفعل). يعمل هذا لأنه عندما UTF-8 BOM (وهو ما يعني VS بمصطلح "التوقيع") موجود في بداية الملف يتم تجاهل المعلمة ترميز الموردة وUTF-8 يستخدم على أي حال. وبالتالي حيث يتم حفظ الملف باستخدام UTF-8 تحصل على نتائج صحيحة وحيث يتم استخدام ANSI كنت على الأرجح أيضا للحصول على النتائج الصحيحة.

سوف

وبالمناسبة إذا كنت معالجة رؤوس الملف لا ReadAllLines جعل الامور أسهل؟.

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