نوافذ الأنابيب كمد لا يونيكود حتى مع التبديل / U

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

  •  08-07-2019
  •  | 
  •  

سؤال

ولدي برنامج وحدة ج # تذكر على أن مخرجات بعض النصوص باستخدام Console.WriteLine. I ثم الأنابيب هذا الإخراج إلى ملف نصي مثل:

وc:myprogram > textfile.txt

ولكن، الملف هو دائما ملف نصي الانسي، حتى عندما أبدأ كمد مع رمز التبديل / u. كمد /؟ تقول عن رمز التبديل / u:

<اقتباس فقرة>   

و/ U يسبب إخراج الداخلية   الأوامر إلى الأنابيب أو ملف لتكون يونيكود

وكان في الواقع يحدث فرقا، عندما أفعل ل

وc:echo "foo" > text.txt

وعلى text.txt غير يونيكود (بدون BOM)

وأتساءل لماذا الأنابيب إخراج برنامج حدة التحكم الخاصة بي في ملف جديد لا إنشاء ملف يونيكود بالمثل وكيف يمكن تغيير ذلك؟

وأنا مجرد استخدام نوافذ كهربائية شل (التي تنتج ملف يونيكود مع الصحيح BOM)، ولكن كنت لا تزال ترغب في معرفة كيفية القيام بذلك مع كمد.

وشكرا!

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

المحلول

والتبديل / U، كما تقول الوثائق، ويؤثر على ما إذا كان <م> الداخلية الأوامر توليد الناتج يونيكود. البرنامج ليس واحدا من الأوامر الداخلية CMD.EXE، وبالتالي فإن الخيار / U لا تؤثر عليه.

لإنشاء ملف نص Unicode، كنت بحاجة للتأكد من البرنامج هو توليد نص Unicode.

وحتى هذا قد لا يكون كافيا، وإن كان. جئت عبر هذا بلوق من جونفينج تشانغ ويصف كيف لكتابة نص Unicode في برنامج وحدة. فإنه يتحقق نوع ملف مقبض الإخراج القياسي. عن الملفات حرف (وحدة أو منفذ LPT)، فإنه يدعو WriteFileW. لجميع أنواع أخرى من مقابض (بما في ذلك ملفات القرص والأنابيب)، وتحويل السلسلة الإخراج إلى صفحة الرموز الحالية وحدة التحكم. أخشى أنا لا أعرف كيف أن يترجم إلى حيث .NET، بالرغم من ذلك.

نصائح أخرى

وكان لي نظرة كيف mscorlib تنفذ Console.WriteLine، وعلى ما يبدو لاتخاذ قرار بشأن أي ترميز إخراج النص لاستخدام استنادا على استدعاء <لأ href = "http://msdn.microsoft.com/en-us/ مكتبة / ms683169 (VS.85) .aspx اتصال "يختلط =" نوفولو noreferrer "> GetConsoleOutPutCP . لذلك أنا التخمين (ولكن لم و confimed بعد) أن مخطط الشفرة عاد هو واحد لاختلاف وحدة PS من أجل وحدة كمد بحيث برنامجي الواقع إخراج الانسي فقط عند تشغيل من كمد.

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