سؤال

مثال:

#include <iostream>

using namespace std;

int main()
{
    wchar_t en[] = L"Hello";
    wchar_t ru[] = L"Привет"; //Russian language
    cout << ru
         << endl
         << en;
    return 0;
}

يطبع هذا الرمز فقط قيم سداسية مثل Adress. كيفية طباعة سلسلة WCHAR_T؟

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

المحلول

تحرير: هذا لا يعمل إذا كنت تحاول كتابة نص لا يمكن تمثيله في مكانك الافتراضي. :-(

يستخدم std::wcout بدلاً من std::cout.

wcout << ru << endl << en;

نصائح أخرى

هل يمكنني أن أقترح std::wcout ?

لذا ، شيء من هذا القبيل:

std::cout << "ASCII and ANSI" << std::endl;
std::wcout << L"INSERT MULTIBYTE WCHAR* HERE" << std::endl;

قد تجد المزيد من المعلومات في سؤال ذي صلة هنا.

يمكنك استخدام صفيف char العادي المملوء بالفعل بأحرف UTF-8. هذا يجب أن يسمح بخلط الأحرف عبر اللغات.

#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n";
}

Windows لديه معلومات مربكة للغاية. يجب أن تتعلم مفهوم C/C ++ من UNIX/Linux قبل البرمجة في Windows.

يخزن WCHAR_T الحرف في UTF-16 وهو حجم ذاكرة ثابت 16 بت يسمى حرف عريض ولكن wprintf () أو WCOUT () لن يطبعوا أحرفًا عريضة غير الإنجليزية بشكل صحيح لأنه لن يتم إخراج وحدة التحكم في UTF-16. سيتم إخراج Windows في اللغة الحالية بينما سيتم إخراج UNIX/Linux في UTF-8 ، وكلها متعددة البايت. لذلك عليك تحويل أحرف واسعة إلى Multii-Belte قبل الطباعة. لا يعمل أمر UNIX WCSTOMBS () على Windows ، ويستخدم Widechartomultibyte () بدلاً من ذلك.

تحتاج أولاً إلى تحويل الملف إلى UTF-8 باستخدام Notepad أو محرر آخر. ثم قم بتثبيت FONT في وحدة التحكم في موجه الأوامر بحيث يمكنه قراءة/الكتابة بلغتك وتغيير صفحة التعليمات البرمجية في وحدة التحكم إلى UTF-8 لعرضها بشكل صحيح عن طريق الكتابة في موجه الأوامر "CHCP 65001" بينما يكون Cygwin افتراضيًا بالفعل إلى UTF-8. هذا ما فعلته في التايلاندية.

#include <windows.h>
#include <stdio.h>

int main()
{
    wchar_t* in=L"ทดสอบ"; // thai language
    char* out=(char *)malloc(15);
    WideCharToMultiByte(874, 0, in, 15, out, 15, NULL, NULL);
    printf(out); // result is correctly in Thai although not neat
}

لاحظ أن 874 = (تايلاندي) صفحة رمز في نظام التشغيل ، 15 = حجم السلسلة

اقتراحي هو تجنب طباعة الشخصيات الواسعة غير الإنجليزية إلى وحدة التحكم إلا إذا لزم الأمر لأنها ليست سهلة.

يمكنك طباعة أحرف واسعة مع wprintf.

#include <iostream>

int main()
{
    wchar_t en[] = L"Hello";
    wchar_t ru[] = L"Привет"; //Russian language
    wprintf(en);
    wprintf(ru);
    return 0;
}

انتاج:

مرحبًا
привет

نحن لا نبحث عن طرق سهلة!

int i = 0;
while (ru[i]) {
   std::cout << (char)ru[i];
   i++;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top