إخراج غير متوقع من STD :: WCOUT << L "Élève"؛ في Windows Shell.

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

  •  05-09-2019
  •  | 
  •  

سؤال

أثناء اختبار بعض الوظائف لتحويل السلاسل بين Wchar_T و UTF8، قابلت النتيجة الغريرة التالية مع Visual C ++ Express 2008

std::wcout << L"élève" << std::endl;

يطبع "úlþve:" والذي من الواضح أنه ليس من المتوقع.

من الواضح أن هذا خطأ. كيف يمكن أن يكون ؟ كيف أفترض أن أتعامل مع هذه "ميزة"؟

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

المحلول

لا يدعم برنامج التحويل البرمجي C ++ Unicode في ملفات التعليمات البرمجية. يجب أن تحل محل تلك الأحرف مع إصدارات HAVEPED بدلا من ذلك.

جرب هذا:

std::wcout << L"\x00E9l\x00E8ve" << std::endl;

أيضا، يجب أن تدعم وحدة التحكم الخاصة بك Unicode أيضا.

تحديث:

لن يتم إنتاج الإخراج المطلوب في وحدة التحكم الخاصة بك، لأن وحدة التحكم لا تدعم Unicode.

نصائح أخرى

قد ترغب أيضا في إلقاء نظرة على هذا السؤال. وبعد يوضح كيف يمكنك في الواقع أحرف Unicode Code Hard-code إلى ملفات باستخدام بعض المحامرة (لست متأكدا من ما ستوفره الخيارات MSVC).

من الواضح أن هذا خطأ. كيف يمكن أن يكون؟

في حين أن أنظمة التشغيل الأخرى التي تم الاستغناء عن ترميزات الأحرف القديمة وتحولها إلى UTF-8، يستخدم Windows اثنين الترميزات Legacy: صفحة رمز "OEM" (المستخدمة في موجه الأوامر) وصفحة رمز "ANSI" (المستخدمة من قبل واجهة المستخدم الرسومية).

ملف المصدر C ++ الخاص بك في رمز ANSI صفحة 1252 (أو ربما 1254 أو 1256 أو 1258)، لكن وحدة التحكم الخاصة بك تفسرها كصنونة OEM صفحة 850.

تستخدم IDE والمترجم صفحة رمز ANSI. تستخدم وحدة التحكم صفحة رمز OEM.

كما أنها مهمة ماذا تفعل مع تلك وظائف التحويل.

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