WinApiのWriteConsoleOutput
を使用して、コマンドプロンプトウィンドウバッファに文字を書き込もうとしています。実際には、などの文字を、'\uFFFF'
や'0xFF'
のようなエンコード/表記を使用する代わりに、ソースコードに直接書くことができるようにしたいと思います(コードページ/文字セットなどの違い)ソースコードからWriteConsoleOutputに直接Unicode(?)文字を書き込む
以下のコードは、私の問題の最も単純な形式を示しています。このコードを実行すると、コマンドプロンプトウィンドウに☺
が出力されませんが、疑問符(?
)が表示されます。
#include <Windows.h>
int main()
{
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
CHAR_INFO c[1] = {0};
COORD cS = {1, 1};
COORD cH = {0, 0};
SMALL_RECT sr = {0, 0, 0, 0};
c[0].Attributes = FOREGROUND_INTENSITY;
c[0].Char.UnicodeChar = '☺';
WriteConsoleOutput(h, c, cS, cH, &sr);
Sleep(5000);
return 0;
}
私のコードに関係なく使用/インストールされている言語の、すべてのWindowsのバージョン間で同一の出力を表示することが不可欠です。私の知る限りでは(確かに最小限です)、特定のコードページを設定する必要があります(Windowsの任意の言語でコマンドプロンプトでサポートされることを望みます)。
私が試した:SetConsoleCP
とSetConsoleOutputCP
機能と周りいじる•CHAR_INFO.UnicodeChar
を使用してからCHAR_INFO.AsciiChar
に変更•
を、私はこの問題で私を助けるためにそれらを活用する方法についての手掛かりを持っていません。
?Visual Studioの変更 - >プロジェクト - >プロジェクトのプロパティ.. - >文字セット可能なすべての値に設定します。
上記の設定に加えて、WriteConsoleOutputA
またはWriteConsoleOutputW
のいずれかを特に使用します。
ソースコードファイルのエンコーディングを(/ out)シグネチャでUTF-8に変更します。私のプロジェクトで
私はプログラム的に私の知る限り、実際のUnicode文字をサポートしていない、8×8の端末にコマンドプロンプトのフォントを設定しています。利用可能な文字はhereと表示されます。これらの文字には '☺'が含まれているので、私の質問はユニコードに関するものではないと私は完全には考えていません。私はもう考えていない。助けてください。
c [0] .Char.UnicodeChar = L'☺ 'を使用する必要があります。コンパイラがあなたのソースコードを理解していることを確認して、「ファイル」>「高度な保存オプション」>「Unicode(UTF-8 with signature) - Codepage 65001」を選択します。現在発行されているBOMは、ソースコードがutf8でエンコードされていることをコンパイラに知らせるのに十分です。 –
@ hans-passantこれは、私に笑顔の代わりに ':'(コロン)を与えます。エンコーディングをUTF-8として保存しても。 – user6003859
文字はU + 263A、3A == ':'です。Lは重要です。 –