• ベストアンサー

unicodeの表示

C言語でプログラミングをしているのですが、unicodeの表示方法がよくわかりません。┌という文字(unicodeでU+250C)を表示したく、wchar_t型など調べたのですがプログラムの書き方がよくわかりませんでした。unicodeを直接指定する方法か'┌'のように直接指定する方法が知りたいです。アドバイスお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

cgwinを起動してみましたが、ちょっとややこしそうですね。 wchar_t unitext[100] = L"あ"; cout << hex << unitext[0] << endl; cout << hex << unitext[1] << endl; とすると、82とa0がはいっていました。(SJISです) printfやcoutを使ってコンソールで表示するには 一度sjisに変換しなければいけないかもしれません。 unicode→sjisは setlocaleや wcstombsを 調べてください。 こういうのもあります。 http://www.doumo.jp/modules/general/mojicode.html (jisですがjisからsjisへの変換は簡単です)

その他の回答 (3)

回答No.4

表示媒体は何ですか? sjisコンソールですか? UTF-8コンソールですか? qt(sjis)ですか? それにより表示方法は違います。 文字をunicodeで保持するのは勝手ですが、 表示する際には、表示媒体が表示できるコードに 変換する必要があります。 wchar_t a = L"┌"とやっても、ソースコードがeuc(sjis)なら、中身は、euc(sjis)ですよ。 やるなら、 表示媒体が、UTF-8なら、 wchar_t a = toUtf8(0x250C) wprintf("%lc", a); です。

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.3

cygwin+gccではやったことはありませんが。。。 VC++のように「Unicodeビルド」があるならばそれを使って、VCで言うところのTCHARもしくはwchar関係の関数のみを使う必要があります。 Unicodeビルドのような関数がない場合に、Unicodeを表示するにはprintfのような関数は使わずに、WindowsでしたらIMultiLanguageを使って文字を出力する必要があります。

  • kmb01
  • ベストアンサー率45% (63/138)
回答No.1

BCBですがこんな感じでいけます。 wchar_t wc[100] = L"ABC"; char c[100]; sprintf(c, "%S", wc);

matsumai
質問者

補足

アドバイス頂いたとおりにやってみたのですが、うまくいきません。何も表示がされない状態です。 cgwinを使っています。

関連するQ&A

  • unicodeと2バイト文字

    文字コードにすごいうとい者なのですが、見慣れない _tmain なんていうものを見てしまって、少し調べてみました。 そうすると、なんだか2バイトでは世界中の文字はもとより、感じすらすべて表すことは不可能で、今のunicode主流は3バイトで表現するのだとか。 で、私の知識の中では、C言語ではwchar_tでunicodeを表現しているらしいのですが、それじゃあ足りないわけで、ちゃんとした3バイト文字を表現するための公式的?な記述方法は(WIN32 APIで)あるのでしょうか。(その他MFCなどでもあれば。) 本人こういう事柄について、今まで考えたこともなく、よくわからないまま質問しているので、どうぞ怒らないでください。 よろしくおねがいします。

  • UNICODE対応ってどういうことなのかわかりません

    VC++とかでUNICODE対応というと文字列をwchar_t型で扱うことなのかなと思うのですが、その場合UTF-8ってどういう扱いになっているのでしょうか? ウィキペディアを見ると、インターネットではUTF-8が主流であるようなことが書かれています。 UTF-8はアスキー文字セットとも互換性があるようなので、char型で文字列を扱うのかなと思いました。 それなのに、VC++でUNICODE対応の設定にするとwchar_tで文字列を扱うようなので、UTF-8がどういう扱いになっているのかよくがわからないのです。 どなたかお答え頂けないでしょうか。 よろしくお願いします。

  • ユニコード文字の変換について

    文字列が書かれたテキストファイルを読み込み、ユニコード部分だけを変換して画面に表示するプログラムを作りたいと思っています。 つまり、 \u305d\u306eaiueo と書かれたテキストファイルがあれば そのaiueo(←『\u305d』は『そ』、『\u306e』は『の』なので) と表示するプログラムを作りたいのですが、fgetsで読み込みprintfで表示するだけではそのまま「\u305d\u306eaiueo」となってしまい困っています。 \を文字(\\)として読み込んでるからだろうとは思うのですが… また、 char a[]="\u305d\u306eaiueo"; と定義した文字列を printf("%s",a); とすると「そのaiueo」と表示されますが、何故こちらは表示されて、前述の方法では表示されないのかも理解できていません。 どのような考え方、方法であれば解決するのでしょうか?

  • C言語でユニコードを使う方法

    WindowsでC言語のプログラムを作っています。 コマンドプロンプト上でユニコードを表示したいのですがどうやればいいですか? 具体的にCのソースを書いて教えて下さい。お願いします。

  • エスケープされたunicodeのデコード

    "\u063A\u0629" 上記のようなエスケープされたUnicodeの文字列を C言語でデコードしなければならないのですが、 何か利用できる関数や、変換ルールなどはないでしょうか? Javascriptなどでは簡単に出来るようなのですが、 C言語の説明は見つけられませんでした。 上記文字列はJSON形式で得られたものなのですが、 どうしてもC言語でデコードする必要があり、困っております。 ちなみにOSはLinuxで、iconvなどはインストール済みです。 エスケープされているせいか、そのままでは変換できないようです…。 ご存知の方がいらっしゃいましたら、是非ご教授お願いいたします。

  • Unicodeは使うべきなのでしょうか?

    ※いまいち文字コードの事が良くわかっていない者です。 今まで、半角1バイト 全角2バイトでプログラミングして来ました。 しかし最近Unicodeの存在に興味や疑問や怖さが募っています。 ■質問1 ・半角1バイト 全角2バイトという扱いは  将来的に廃止され締め出されてしまう危険などが有るのでしょうか? ■質問2 ・ブラウザ/一部チャットのように多言語同時表示は  文字数分大量の無駄なデータ送信負荷になってないのでしょうか?  時に1文字6バイトにすらなるとも聞くだけに疑問です。 ■質問3 ・Unicodeだと、半角1バイト 全角2バイトの扱いに比べ  保存も管理も通信も、無駄が増えるだけにも思えてしますます。  Unicodeをプログラマーの皆さんはどう認識し使ったり使い分け  しているのでしょうか? 漠然とした質問で申し訳ないですが、 何かご助言を頂けますと幸いです。

  • Unicode

    先日は文字コードについて色々助言してくださりありがとうございました。 おかげさまでJIS,EUC,SJISの変換はできましたが、 Unicodeについて詰まっているところがあります。 SJIS→UnicodeはSJISにあったU+XXXXに変換し、 それを1~4バイトにさらに変換して文字表記されることで出来ます。 後者の1~4バイトにさらに変換するやり方は出来ているのですが、 前者のSJISにあったU+XXXXに変換するところで詰まっています。 ##SJIS Unicode Name Note 0x00 U+0000 # <control> 0x01 U+0001 # <control> 0x02 U+0002 # <control> 0x03 U+0003 # <control> 0x04 U+0004 # <control> 0x05 U+0005 # <control> 0x06 U+0006 # <control> 0x07 U+0007 # <control> : : こういった変換表(テキストファイル)があるのですが、 どのようにしたらこのファイルをプログラム上で操作? できるのでしょうか? 例)SJISで0x07→U+0007→1~4バイト変換の 0x07→U+0007部分についてです。 また、逆に変換する際の0x07←U+0007についても わからないでいます。 何かヒントをください。

  • ワイド文字についてのURLをPlzです

    ワイド文字やUnicodeの文字について詳しいサイトあったら教えてください。 レベル的には #include <stdio.h> #include <wchar.h> int main(){ wchar_t *wc = L"wchar_tワイド文字列でえす。"; fputws(wc, stdout); return 0; } これを実行して、なんで日本語が表示されないのかがさっぱりわからないレベルです。。 お願いします。 (注:教えていただきたいのは、上のプログラムの間違っている箇所でなく、それがわかるようになるようなサイトです。)

  • Unicodeではないプログラムの言語

    Unicodeではないプログラムの言語を一度英語に変えたのですが、日本語に戻したあと前と少し設定が変わってしまったようです。 IEの画面の何もないところを右クリックすると??????って言うのがあったり、ほかのプログラムでも一部文字化けが起こったりしています。 そこで、そもそもこのプログラムの言語のデフォルトは日本語になっているのですか?(日本語OS) 何か解決する方法がありますか? よろしくお願いします。 ちなみに再インストールはできれば避けたいです。

  • 「Unicodeで送信」という表示が出ます><・・助けてください!

    ある海外のオンラインショップを利用したく思いそのショップのアドレスにメールを送りました。 返事を貰ってそれに対する返事をしようと送られてきたメールを使って返信しようとして送信ボタンを押すと「メッセージの文字セットの競合」という窓が出てきて以下のような表示が出ます。 「Unicodeで送信」 メッセージはUnicodeメッセージとして送信されます。すべての文字セットの情報は保存されます。受信者の電子メールプログラムがUnicodeをサポートしていない場合は、メッセージが正しく表示されない場合があります。 「そのまま送信」 メッセージは通常の電子メールとして、既定の文字セットを使用して、送信されます。既定の文字セットにない文字を使用すると、受信者が文字を正しく表示できない場合があります。 「キャンセル」 メッセージの編集に戻ります。 この3つの中からひとつを選んで送信となるんですが、最初の「Unicodeで送信」を選択すると変な文になってしまいそうで心配です。なので「そのまま送信」で送信しようかと思うんですが、これもどうも不安です。 こういう場合どれを選択して送信すれば相手にちゃんとした文章で送れますでしょうか?