ج # :لا يتم عرض الشخصيات بشكل جيد عندما تكون في وحدة التحكم، لماذا؟

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

سؤال

الصورة أدناه توضح كل شيء:

نص بديل http://img133.imageshack.us/img133/4206/accentar9.png

يأتي المتغير textInput من File.ReadAllText(path); وشخصيات مثل :" ه ه ...لا تعرض.عندما أقوم بتشغيل UnitTest، كل شيء على ما يرام!أراهم...لماذا؟

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

المحلول 3

لا أعرف لماذا يعمل مع NUnit، لكني أفتح الملف باستخدام NotePad++ وأرى ANSI بالتنسيق.لقد قمت الآن بالتحويل إلى UTF-8 وهو يعمل.

ما زلت أتساءل لماذا كان يعمل مع NUnit وليس في وحدة التحكم؟ولكن على الأقل يعمل الآن.

تحديثلا أفهم سبب التصويت على السؤال وفي هذه الإجابة لأن السؤال لا يزال جيدًا، لماذا لا أستطيع قراءة ملف ANSI في وحدة التحكم ولكن في NUNit أستطيع ذلك؟

نصائح أخرى

فئات .NET (System.IO.StreamReader وما شابه) يتخذ UTF-8 كالتشفير الافتراضي.إذا كنت تريد قراءة ترميز مختلف، فيجب عليك تمرير هذا بشكل صريح إلى التحميل الزائد للمنشئ المناسب.

لاحظ أيضًا أنه لا يوجد ترميز واحد يسمى "ANSI".من المحتمل أنك تشير إلى صفحة التعليمات البرمجية لنظام التشغيل Windows 1252 والمعروفة أيضًا باسم "أوروبا الغربية".لاحظ أن هذا يختلف عن ترميز Windows الافتراضي في البلدان الأخرى.هذا مناسب عند محاولة الاستخدام System.Text.Encoding.Default لأن هذا في الواقع يختلف من نظام إلى نظام.

/يحرر:يبدو أنك أسأت فهم إجابتي وتعليقي:

  1. المشكلة في التعليمات البرمجية الخاصة بك هي أنك تحتاج إلى إخبار .NET بالتشفير الذي تستخدمه.
  2. الملاحظة الأخرى التي قد تشير إلى "ANSI". مختلف الترميزات، لم يكن لها أي علاقة بمشكلتك.لقد كانت مجرد ملاحظة "بالمناسبة" لمنع سوء الفهم (حسنًا، لقد جاءت هذه الملاحظة بنتائج عكسية).

حتى النهاية:يجب أن يكون حل مشكلتك هو الكود التالي:

string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));

الجزء المهم هنا هو استخدام المناسب System.Text.Encoding مثال.

ومع ذلك، يفترض هذا أن التشفير الخاص بك هو بالفعل Windows-1252 (لكنني أعتقد أن هذا ما يعنيه برنامج Notepad++ بـ "ANSI").ليس لدي أي فكرة عن سبب عرض النص الخاص بك بشكل صحيح عند قراءته بواسطة NUnit.أفترض أن NUnit إما أن لديها نوعًا من الاكتشاف التلقائي لترميزات النص أو أن NUnit تستخدم بعض الإعدادات الافتراضية الغريبة (على سبيل المثال.وليس UTF-8).

أوه، وبالمناسبة:يشير "ANSI" حقًا إلى "المعهد الوطني الأمريكي للمعايير".هناك الكثير من المعايير المختلفة تمامًا التي تحتوي على "ANSI" كجزء من أسمائها.على سبيل المثال، يعد C++ (من بين أشياء أخرى) أحد معايير ANSI أيضًا.

فقط في بعض السياقات يتم استخدامه (بشكل غير دقيق) للإشارة إلى ترميزات Windows.ولكن حتى هناك، كما حاولت أن أشرح، فإنه عادة لا يشير إلى أ محدد الترميز بل إلى فئة من الترميزات التي يستخدمها Windows كإعدادات افتراضية لبلدان مختلفة.أحد هذه البرامج هو Windows-1252.

وحاول وضع الشفرة الناتج وحدة التحكم sessin في استخدام chcp أمر. صفحات الرموز بدعم من النوافذ هنا ، <وأ href = "HTTP: //www.microsoft.com/globaldev/reference/oem.mspx "يختلط =" نوفولو noreferrer "> هنا ، و <لأ href =" http://www.microsoft.com/globaldev/reference/iso .mspx "يختلط =" نوفولو noreferrer "> هنا . تذكر، fundametnaly وحدة بسيطة جدا: يعرض UNCICODE أو DBCS الأحرف باستخدام الشفرة إلى dtermine الشكل المنقوش التي سيتم عرضها.

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