طباعة أحرف UTF-8 المناسبة في وحدة تحكم Windows
تهدف هذه المقالة إلى معالجة التحديات التي تواجهها عند محاولة طباعة أحرف UTF-8 في وحدة تحكم Windows.
وصف المشكلة
واجه المستخدمون صعوبات في عرض الأحرف الألمانية باستخدام رمز محدد مقتطف:
#include
#include
int main() {
SetConsoleOutputCP(CP_UTF8);
// German characters not appearing
char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
wchar_t *unicode_text = new wchar_t[len];
MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
wprintf(L"%s", unicode_text);
}
على الرغم من تعيين صفحة الرموز الإخراجية على UTF-8، لا تتم طباعة الأحرف الألمانية بشكل صحيح.
الحل
لطباعة بيانات Unicode بشكل صحيح في وحدة تحكم Windows، هناك عدة طرق متاحة:
استكشاف الأخطاء وإصلاحها
في حالة إخراج غير صحيح بالطريقة الثالثة:putc('\302'); putc('\260'); // doesn't work with CP_UTF8
puts("\302\260"); // correctly writes UTF-8 data to Windows console with CP_UTF8
وذلك لأن واجهة برمجة التطبيقات لوحدة التحكم تفسر البيانات التي تم تمريرها في مكالمات منفصلة على أنها ترميزات غير قانونية عند استخدام CP_UTF8.لحل هذه المشكلة، فكر في الإنشاء فئة فرعية من Streambuf تتعامل بدقة مع تحويل الأحرف متعددة البايت وتحافظ على حالة التحويل بين عمليات الكتابة. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3