私は、コンソールへのwchar_t値を印刷することができますどのように?

StackOverflow https://stackoverflow.com/questions/2493785

質問

例:

#include <iostream>

using namespace std;

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

このコードは、アドレスのような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;
あなたはここにのhref="https://stackoverflow.com/questions/276010/stdwcout-to-console-window-in-xcode">

あなたが実際にUTF-8文字で満たされている通常のchar配列を使用し使用することができます。これは、言語間の文字を混合できるようにする必要があります。

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

Windowsは、非常に混乱した情報を持っています。あなたがWindowsでプログラミングする前に、UNIX / LinuxからのC / C ++の概念を学ぶ必要があります。

ワイド文字が、wprintf()またはwcout(と呼ばれる固定16ビットのメモリ・サイズであるUTF-16で

wchar_tの店舗文字)UTF-16で無コンソールが出力されますので、正確に英語以外のワイド文字を印刷することはありません。 UTF-8でのUNIX / Linux意志出力しばらく現在のロケールでのWindowsの意志出力、すべてのマルチバイトです。だから、印刷前に、マルチバイトにワイド文字を変換する必要があります。 UNIXコマンドwcstombs()の代わりに)(WideCharToMultiByteを使用して、Windows上で作業をしません。

まず、メモ帳や他のエディタを使用してUTF-8にファイルを変換する必要があります。それはcygwinのは、既に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;
}

出力:

  

こんにちは
  Привет

私たちは簡単な方法を探していません!

int i = 0;
while (ru[i]) {
   std::cout << (char)ru[i];
   i++;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top