例:
#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のようなHEX値のみを出力します。 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;
関連する質問 here で詳細を見つけることができます。
実際にはutf-8文字で満たされている通常のchar配列を使用できます。これにより、言語間で文字を混在させることができます。
Windowsには非常にわかりにくい情報があります。 Windowsでプログラミングする前に、Unix/LinuxからC/C++の概念を学ぶ必要があります。
wchar_tは、ワイド文字と呼ばれる16ビットの固定メモリサイズであるUTF-16に文字を格納しますが、コンソールがUTF-16で出力しないため、wprintf()またはwcout()は英語以外のワイド文字を正しく印刷しません。 Windowsは現在のロケールで出力されますが、unix/linuxはUTF-8で出力され、すべてマルチバイトです。そのため、印刷する前にワイド文字をマルチバイトに変換する必要があります。 UNIXコマンドwcstombs()はWindowsでは機能しません。代わりにWideCharToMultiByte()を使用してください。
最初に、メモ帳またはその他のエディターを使用してファイルをUTF-8に変換する必要があります。次に、コマンドプロンプトコンソールにフォントをインストールして、言語で読み取り/書き込みができるようにし、コマンドプロンプト "chcp 65001"を入力してコンソールのコードページを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;
}
出力:
こんにちは
Привет
#include <iostream>
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
cout << "\tДОБРО ПОЖАЛОВАТЬ В КИНО!\n";
}