Как я могу распечатать значения 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?
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=размер строки
мое предложение-избегать печати неанглийских широких символов для консоли, если это не необходимо, потому что это непросто.
Comments