"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية طباعة حرف UTF-8 بشكل صحيح في وحدة تحكم Windows باستخدام الأحرف الألمانية؟

كيفية طباعة حرف UTF-8 بشكل صحيح في وحدة تحكم Windows باستخدام الأحرف الألمانية؟

تم النشر بتاريخ 2024-11-09
تصفح:921

How to Print UTF-8 Character Correctly in Windows Console with German Characters?

طباعة أحرف 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، هناك عدة طرق متاحة:

  1. استخدام WriteConsoleW مباشرة: التواصل مع واجهة برمجة تطبيقات وحدة التحكم صراحة باستخدام WriteConsoleW. يضمن هذا الأسلوب كتابة البيانات بشكل صحيح على وحدة التحكم. ومع ذلك، فإنه يتطلب التمييز بين حالات إخراج وحدة التحكم وغير وحدة التحكم.
  2. إعداد وضع الإخراج: اضبط وضع الإخراج لواصفات ملفات الإخراج القياسية على "_O_U16TEXT" أو "_O_U8TEXT" عبر _setmode. يتيح ذلك لوظائف إخراج الأحرف الواسعة إخراج بيانات Unicode بشكل صحيح إلى وحدة التحكم. لاحظ أن هذه الطريقة تتطلب استخدام وظائف الأحرف العريضة فقط في الدفق المحدد.
  3. ترميز CP_UTF8: اطبع نص UTF-8 مباشرة إلى وحدة التحكم عن طريق ضبط صفحة الترميز اللغوي لإخراج وحدة التحكم على CP_UTF8 واستخدام المناسب وظائف منخفضة المستوى أو تنفيذ ostream مخصص.

استكشاف الأخطاء وإصلاحها

في حالة إخراج غير صحيح بالطريقة الثالثة:

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