2016-11-05 18 views
0

私はacプログラムを書いて、ウィンドウ10のcmdウィンドウでprintf()などの特殊文字を出力しようとすると、次のようなsthしか表示されません。▒▒▒▒▒▒▒▒cmdウィンドウで特殊文字を出力する方法は?

しかし、私はちょうどそれらの文字を正しく表示する実行されているACプログラムなしでcmdのウィンドウでそれらを入力します。 コンソールタイプをnetbeansの標準出力に変更すると、出力も正しくなります。 私はcmdのコードページを変更しようとしましたが、問題を修正しませんでした。 私はgccのcコンパイラを使用します。

答えて

2

それはAのZさんに、printf関数はのようにデフォルトのprintf のみプリントASCII文字によって、処理される方法ですが、ここでの使用、他の言語からの特殊文字/文字を印刷するには、Wikipediaの記事https://en.wikipedia.org/wiki/ASCIIへのリンクですこれは、あなたが、要するに

printf(L"your string"); 

印刷特殊文字を印刷するには、あなたの文字列の前に接頭辞L、資本Lを追加したいテキストをあなたの文字列を置換します。

は、それが理由で文字エンコーディングのための異なるコード・ページの使用方法であるmukund2003

+0

この結果、コンパイラの警告が表示され、 '' y "'のみが出力されます。 UTF16リトルエンディアンでは、文字列 ''の2番目のバイトはゼロです。 ANSIとUnicodeを混在させることはできません。 –

2

を助け願っています。

各文字が1バイトだけでエンコードされたファイルに保存されたプログラムコードのGUIテキストエディタでは、コードページWindows-1252が西ヨーロッパと北米の国で使用されます。

コンソールアプリケーションの実行時に開いたコンソールウィンドウでは、西ヨーロッパ諸国のOEM 850と北米諸国のOEM 437にあるOEMコードページが使用されます。

ÄÖÜäöüß西ヨーロッパと北米の国では少なくとも実行時に、コンソールウィンドウに文字が表示されるように、異なるバイト値をコードで記述する必要があります。

Character Windows-1252 OEM 850 
    Ä    \xC4   \x8E 
    Ö    \xD6   \x99 
    Ü    \xDC   \x9A 
    ä    \xE4   \x84 
    ö    \xF6   \x94 
    ü    \xF1   \x8C 
    ß    \xDF   \xE1 

コンソールウィンドウにデフォルトで使用されるコードページは、コマンドプロンプトウィンドウを開いて見て、アクティブコードページを表示両方chcp(変更コードページ)またはmodeのいずれかを実行することができます。

ユーザーアカウントのコンピュータ上のGUIアプリケーションおよびコンソールアプリケーションの既定のコードページは、このユーザーアカウントのWindows地域および言語設定によって異なります。

方が良い文字エンコーディングを理解するために読むべきいくつかのWebページ

プログラマは、コンパイルされた実行可能ファイルによって出力された文字列にASCII以外の文字を書き込むべきではありません。なぜなら、実行可能な文字のバイナリ表現(バイト)を作成する際にコンパイラがどのコードページを使用するかによって異なります。文字列が出力される前に、アプリケーションの実行中のアクティブなコードページがわかっているか、またはアプリケーションによって定義されている場合は、16進表記を使用する方がよいでしょう。

実行可能ファイルにUnicodeで文字列を格納し、文字列を出力する前に出力ハンドルのエンコーディングを判断し、文字列が出力ハンドルに書き込まれる前に各Unicode文字列を出力ハンドルのエンコーディングに変換することもできます。

もちろん、使用される出力フォントによって、実行可能ファイル内の文字列のバイトが最終的に実際に画面に表示される方法に依存します。

+0

cmdfepage 850 rspでprintf()のエスケープシーケンスを使ってみました。 1252しかし、それらのどれも動作しません。出力は依然として同じです。しかし、私がcygwinターミナルを使ってcプログラムを実行し、端末のオプションメニューの文字セットをデフォルト(UTF-8)からCP1252のようなsthに変更すると、出力は正しいですか? –

+0

100%クリアするだけです。 Stra \ xE1burg gef \ x84llt "(OEMの場合はバイト値)の文字列" B \ x84ume "でアプリケーションをコンパイルしたにもかかわらず、Windowsのコンソールウィンドウに出力された「Bäumewerden inStraßburggef? Cygwinは、Windowsコマンドインタープリタとは異なるスクリプトインタープリタです。 Cygwinは、デフォルトでUTF-8エンコーディングを使用します。 UTF-8でエンコードされた同じ文字列は、Stra \ xC3 \ x9Fburg gef \ xC3 \ xA4lltの "B \ xC3 \ xA4ume"になります。 [UTF-8](https://en.wikipedia.org/wiki/UTF-8)では、1文字につき1〜4(または6バイト)バイトが使用されます。 – Mofi

関連する問題