Вопрос

Пример:

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

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

Вы можете использовать обычный массив символов, который фактически заполнен символами 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-битный размер памяти, называемый wide character, но wprintf() или wcout() никогда не будут корректно печатать неанглоязычные символы wide, потому что ни одна консоль не будет выводить данные в UTF-16.Windows будет выводить данные в текущей локали, в то время как unix / linux будет выводить данные в UTF-8, все они многобайтовые.Таким образом, вы должны преобразовать широкие символы в многобайтовые перед печатью.Unix-команда wcstombs() не работает в Windows, вместо нее используйте WideCharToMultiByte().

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