web-dev-qa-db-ja.com

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のようなHEX値のみを出力します。 wchar_t文字列を印刷する方法は?

64
zed91

編集:デフォルトのロケールでは表現できないテキストを記述しようとしている場合、これは機能しません。 :-(

つかいます std::wcout の代わりに std::cout

wcout << ru << endl << en;
79
Nate

std::wcout

だから、このようなもの:

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

関連する質問 here で詳細を見つけることができます。

13
Konrad

実際にはutf-8文字で満たされている通常のchar配列を使用できます。これにより、言語間で文字を混在させることができます。

0
Michael Speer

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 =文字列のサイズ

私の提案は、簡単ではないので、必要でない限り、英語以外のワイド文字をコンソールに印刷しないようにすることです。

0
Ray Chakrit

wprintf でワイド文字を印刷できます。

#include <iostream>

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

出力:

こんにちは
Привет

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