• 締切済み

コンソールにUNICODE (C#)

Console.WriteがUNICODEを出力してくれません。 Console.Write("(UNICODEを含んだ文字列)"); としてもUNICODE依存の文字は全部?になってしまいます。 Windows2000、XPのコンソールにはIMEやクリップボードからUNICODEが入力できるのは確認できているし、CからAPIのWriteConsoleWを使った場合でもUNICODEが出力できることは確認しています。

みんなの回答

回答No.1

UNICODEで出力されているからです。UNICODEが出力されていないのではなく、コンソールツールがShift JISしか表示できていないのです。ファイルにリダイレクトして、秀丸などの文字コードがわかるエディタで開いてみてください。 see:Encording.GetEncording

haporun
質問者

補足

>コンソールツールがShift JISしか表示できていないのです だからcmd.exeがUNICODEを表示できることは確認しています。 >ファイルにダイレクトして ファイルにリダイレクトしましたが、やはりShift_JISでしか出力されておらず、UNICODE依存文字は表示されていません。 Consoleが内部でWriteConsoleWを使っていないようです。 何か私の考えが間違っているなら、もっと詳しく教えてください。

関連するQ&A

  • UNICODEなPerl

    なんかいつもしょうもない質問ばっかで申し訳ないのですが、UNICODEで書いたソースコードを実行してくれるPerlってないですか? できればWINで。 文字列をUNICODEに変換できるモジュールとかじゃなくて、たとえばリテラル文字列のなかにユニコード依存なハートマークとか入れられたり、glob関数がファイルリストをUNICODEで受け取れたりと。

  • 【VC#】Windowsアプリケーションからコンソール画面への文字列出力

    Visual Studio 2005でのC#プログラミングについて教えてください。 Windowsアプリケーションからコンソール(コマンドプロンプト)に文字列を出力するにはどのようなコーディングを行えば良いのでしょうか? 通常、プロジェクトの新規作成の段階で「コンソール アプリケーション」を選択した場合はConsoleクラスのWriteメソッドやWriteLineメソッドを使用すればそのままコンソールの出力されると思います。 しかし、現在は「Windowsアプリケーション」を選択して開発を行っており、その状態からでは上記メソッドを使用しても視覚的には何も起きません。 コンソールに対して文字列を出力しようとしている理由は、現在ログをテキストボックスに表示させているのですが、そのログの量が非常に多く、扱う文字列のが多くなり処理が重くなってしまっているからです。 (textbox.Text = "新たに発生したログ" + textbox.Text; といった形で処理させています。) もし、コンソールに対する文字列出力が困難、または不可能であれば上記のような処理を実現するために適切な方法についてもご教示頂ければ幸いです。 どうぞよろしくお願い致します。

  • Unicode対応でも保存できない文字の保存法

    チャットで使うと不思議なこと(改行など)ができる半角スペースみたいな文字があるのですが、それを保存したいです。 クリップボードに貼り付けるまでは出来るのですが、その後、Unicodeに対応させたメモ帳に貼り付けても認識しませんでした。 また、Unicode対応のクリップボードの履歴を保存させるソフトでも表示されませんでした。その文字と普通の文字を組み合わせてコピーすると、普通の文字だけになっていました。 この不思議な文字は一体何なのでしょうか?どうすれば保存することができますか?

  • syslogをコンソールに出力する方法

    syslog.confで出力先を/dev/console(コンソールに出力)に設定したのですが、 logger後、X上のターミナルには何も表示されません。 X上のターミナルはコンソールとは言わないのでしょうか? 上記設定で出力内容を確認するには1~3のrunlevelでないと不可能なのでしょうか?

  • PHPにおいて16進数のアスキー文字とユニコード

    文字列の明確な違いがわかりません。 たとえば16進数のアスキー文字であれば print "\x41"; とした場合  A という文字が出力されます。 また print 0x41; とした場合はアスキー文字ではなく 65という10進数における数値が出力されますね。 さらには print "\xe6\x96\x87\xe5\xad\x97\xe5\x88\x97"; と記述すると 文字列 という文字が出力されます。 ではそうではなくユニコード文字列というのはなんなのでしょうか? 一般てきに \u0000 という形式で表記される物ですが、コレがいまいちわかりません。 これは16進数のアスキー文字によるマルチバイト文字の再現と何がことなるのでしょうか? たとえば、JSONなんかを単純に出力してみるとこのユニコード文字列という形式で表現されますよね? このユニコード文字列の実態?を知りたいです。 よろしく御願いします。

    • ベストアンサー
    • PHP
  • unicode と shift_jis

    テキストファイルを読み込みデータを作成して出力するプログラムを作成しているのですが国際化させることになりました。そこで問題が‥テキストファイルが日本用はshift_jis、海外用はunicodeで構成されています。shift_jisでの文字列操作は良いとしてunicodeが全然わかりません。海外向けを想定したときに気をつけなければならないこともわかりません。なんでもいいので教えてください。お願いします。特に、unicodeの文字列操作はまったくよくわかりませんので細かい点から教えていただけると光栄です。よろしいお願いします。

  • unicode文字列(日本語)のファイル出力方法

    お世話になっております。 現在、VC++でプログラミングを行っておりますが、 日本語の文字列のファイル出力ができずに困っております。 参考にしたのは以下のサイトです。 http://sunafukin.jp/dannatti/software/vc/control/secure/fprintf_s.html 作成したプロジェクトファイルは以下の設定です。 ・Visual C++のプロジェクト「Win32」 ・「Win32コンソールプロジェクト」 ・アプリケーションの設定はWindowsアプリケーション ・文字セットにUnicodeを選択 文字セットにUnicodeを利用しなければ、日本語の文字列も正常に出力されるのですが、Unicodeを利用すると日本語が全て「?」と表記されてしまいます。 この「?」が出てしまう問題の解決方法をご存じの方がいらっしゃいましたら、ご教授宜しくお願い致します。

  • C言語でUnicodeの文字列を扱う正しい方法が知りたいです。

    C言語でUnicodeの文字列を扱う正しい方法が知りたいです。 例えば、変数の中に格納された文字列が「a=3」かつ、文字列が「test」であれば処理を実行するといったプログラムの場合、 int a; a = 3; TCHAR file1[128]; file1 = TEXT"test"; if(a = 3 && file1 = TEXT"test"){//実行する処理}; のような形を考えましたが、エラーは出ないものの処理が実行されずに素通りしてしまいます。。 環境はVisual C++ 2008 Expressで、種類はコンソールプログラムではなく、GUIを持ったWindowsプログラムです。 どこを間違えているのでしょうか?

  • C#について

    using System; class AddressBook: PhoneBook { private string address; public AddressBook() : base() { address=""; } public void Input() { base.Input(); Console.Write("住所?"); string address=Console.ReadLine(); } public void Writes() { base.Write(); Console.WriteLine("住所:{0}",address); } } class kadai62 { public static void Main() { Console.Write("電話帳に入力する人数を入れてください:"); int n = int.Parse(Console.ReadLine()); AddressBook[] pb = new AddressBook[n]; int i; for (i = 0; i < pb.Length; i++) { pb[i] = new AddressBook(); Console.WriteLine("{0}番目を入力してください.", i+1); pb[i].Input(); } Console.WriteLine(); while(true) { Console.Write("どこから探しますか?[1:氏名,2:自宅電話,3:携帯電話,0:終了] "); int t = int.Parse(Console.ReadLine()); if (t == 0) break; Console.Write("探す文字列は?"); string s = Console.ReadLine(); for (i = 0; i < pb.Length; i++) { if (pb[i].Search(t, s)) pb[i].Writes(); } } } } このプログラムで public void Writes() { base.Write(); Console.WriteLine("住所:{0}",address); } のaddressが出力されません・・どうすれば 出力されますか?

  • エディットコントロールへのUnicodeの入力

    VisualStudio2005 C++、マルチバイト文字セットでWindowsアプリ ケーションを作っています。動作環境は、WindowsXP SP3 (x86)。 モーダルダイアログに貼り付けたエディットコントロールでは、 MicrosoftIMEStandard2002で変換確定した文字(例えばハート (U+2665))が表示されるので、GetWindowTextW()でそのユニコード 文字列を取得できるのですが、 モードレスダイアログに貼り付けたエディットコントロールでは、 変換文字列が'?'にコンバートされて表示されてしまいます。 コピー&ペーストでは、Unicode文字も表示できるので、 IMEの変換後の処理がうまくいっていないと思うのですが、 どのようにすれば、変換確定しても'?'にコンバートされずに 文字列が表示できますでしょうか? お教えください。よろしくお願いします。 (むかしつくったアプリのため、Unicodeでビルドするには 修正が多いので、マルチバイトのビルドでやりくりしたいのです。)

専門家に質問してみよう