Как я могу распечатать значения wchar t для консоли?



пример:



#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?

805   7  

7 ответов:

редактировать: это не работает, если вы пытаетесь написать текст, который не может быть представлен в локали по умолчанию. : - (

использовать 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;

вы можете найти дополнительную информацию в соответствующем вопросе здесь.

вы можете использовать обычный массив символов, который фактически заполнен символами utf-8. Это должно позволить смешивать символы на разных языках.

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

вы можете печатать широкие символы с помощью wprintf.

код:

#include <iostream>

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

выход:

Привет
Привет

Windows имеет очень запутанную информацию. Вы должны изучить концепцию C/C++ из Unix/Linux перед программированием в Windows.

wchar_t хранит символ в UTF-16, который является фиксированным 16-битным размером памяти, называемым широким символом, но wprintf() или wcout() никогда не будут правильно печатать неанглийские широкие символы, потому что никакая консоль не будет выводиться в UTF-16. Windows будет выводиться в текущей локали, а unix / linux будет выводиться в UTF-8, все они многобайтовые. Таким образом, вы должны конвертировать широкий символы для многобайтовых перед печатью. Команда unix wcstombs() не работает в Windows, вместо этого используйте WideCharToMultiByte ().

сначала вам нужно конвертировать файл в UTF-8 с помощью блокнота или другого редактора. Затем установите шрифт в консоли командной строки, чтобы он мог читать / писать на вашем языке и изменять кодовую страницу в консоли на 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=размер строки

мое предложение-избегать печати неанглийских широких символов для консоли, если это не необходимо, потому что это непросто.

мы не ищем легких путей!

int i = 0;
while (ru[i]) {
   std::cout << (char)ru[i];
   i++;
}

Comments

    Ничего не найдено.