none
コマンドライン引数でJIS2004コードを受け取る方法を教えてください RRS feed

  • 質問

  • Windows Vista上で動作するコマンドを作成しようとしていますが、コマンドライン引数でJIS2004コード特有の文字(例えば、「鷗」「瀆」といった文字)を受け取って、標準出力などに表示しようとすると、「?」に置換されてしまいます。これらを入力そのままに表示する方法はありませんでしょうか?

     

     

    2006年11月17日 14:28

すべての返信

  • C++フォーラムだし、アンマネージドという前提で基本的なところから。

    • まずUnicode版のライブラリをリンクして、生成されているでしょうか?
    • mainもUnicode版のものを使用しているでしょうか?

    このへん、いろいろあるんでまずはmsdnの国際化のあたりをどうぞ。

     

    2006年11月18日 0:51
  • wmainは初めて知りました。どうもありがとうございます。とりあえず _UNICODE つきで、以下のようなソースを試しに作ってみました。

    ------------------------------------------------------------------------

    #include <stdio.h>
    #include <string.h>
    #include <locale.h>

    int wmain(int argc, wchar_t *argv[], wchar_t *envp[]) {

     if(argc < 2){
      return 0;
     }

     setlocale(LC_ALL, "jpn");
     wprintf(L"[%s]\n", argv[1]);

     return 0;
    }

    ------------------------------------------------------------------------

    しかし、UNICODE対応が不十分なのか、VIsta上で引数に「冒瀆」などを与えてみると、「冒?」と表示されています。

     

    2006年11月18日 6:41
  • Vistaではどうなっているのかサッパリわかりませんが、
    XPのときは、WriteConsoleW関数を使わないとUnicode文字を出力できなかったです。

    参考:C言語で、unicodeを扱うには?

    2006年11月18日 6:52
  • 表示に使ってるフォントが実はJIS2004対応のフォントじゃないとかってオチじゃないよね?

    2006年11月18日 15:02
  • WriteConsoleWで表示成功しました。ご回答ありがとうございました。

     

    2006年11月20日 8:52
  • コンソール上でデフォルトフォントなので「ラスタフォント」です。入力時には出ているので、同じコンソールに出力もできるかと。
    2006年11月20日 8:54