• ベストアンサー

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

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

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

  • ベストアンサー
回答No.4

>_tfopen_s(&fp, _T("c:\\text.txt"), _T("w")); の場合、Unicode文字セットを使うでも、マルチバイト文字セットを使うでも 出来上がるファイルの文字コードはCP932のものになります。 決してUnicodeの文字コードでのテキストファイルができるわけではありません。 ccs=UNICODEのように第3引数に指定し、Unicodeの文字コードでのテキストファイルを出力させます。 http://msdn.microsoft.com/ja-jp/library/z5hh6ee9.aspx

tohboe
質問者

お礼

お礼が遅くなり申し訳ありません。 ありがとうございます。 ご教授頂いたやり方で問題を解消できました。 CP932というものの存在を初めて知りました。勉強になります。 ありがとうございました。

その他の回答 (3)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

プログラムは http://sunafukin.jp/dannatti/software/vc/control/secure/fprintf_s.html こちらと一字一句まったく同じなのでしょうか? 私の環境(VC++.2005,Win2000)で試したところ、 2006 3.141590 a 文字列 というファイルがちゃんと作成されましたが。

tohboe
質問者

お礼

ご協力いただきありがとうございました。 bluecampusさんからご教授頂いた方法で解消することができました。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

>バイナリエディタ(Unicode対応)で開いた場合も同様に?マークで表示されてしまいます。 そうじゃなくて、バイナリ値のほうはどう表示されているのでしょうか?

tohboe
質問者

補足

申し訳ありません。知識が乏しくて。 バイナリ値とは、16進数で表記される値のことで宜しいでしょうか? それでしたら、?と表記される箇所は全て「3F」と表記されます。

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.1

>Unicodeを利用すると日本語が全て「?」と表記されてしまいます。 ファイルの内容の確認には、何をお使いでしょうか。 VCのエディタで開いたり、バイナリエディタで開いた場合はどうなりますでしょうか。 あと、OSとVCのバージョンも詳しくお願いします。

tohboe
質問者

補足

ご回答ありがとうございます。 内容の確認はノートパッドを利用しています。 VCのエディタ、バイナリエディタ(Unicode対応)で開いた場合も同様に?マークで表示されてしまいます。 OSはWindows XP、VCのバージョンはVisualStudio2005です。

関連するQ&A

  • VC++ マルチバイト文字とUniCode文字??

    VC++のプロジェクトプロパティには文字セット指定があります 『マルチバイト文字セット』『UniCode文字セット』の2者が選択出来ますが、これらの選択の優劣は何処にありますか? この選択の適否が分からない私は参考にしているサンプルがマルチバイトである時にはマルチバイトを、またUniCodeで書かれたサンプルを見ている際にはUniCodeを指定しており、恥ずかしいかぎりです 選択の判断基準を如何すれば良いのかご指導をお願い申し上げます 更に恥ずかしい質問】なぜC#には文字セット指定が見当たらないのでしようか???

  • プリンタへ文字列の出力方法について

    1、改行コード「\r\n」を含む文字列を取得 2、「印刷」コモンダイアログを呼出す。 3、TextOut()関数で出力する。 すると、改行されずに「・・」と文字化けされて出力される。 どうやらTextOut()関数では、改行コードがサポートされていない様でした。 そこで、質問です。 改行コードを含む文字列を、改行して出力する方法はないでしょうか? TextOut()関数で出力するには、 改行を含む文字列を、改行を含まない文字列に分けるしかないですよね? 良い方法がないかな?と思い質問させて頂きました。 #Win98、VC++、SDKで作成しています。

  • ユニコード文字列の分割

    csvやファイルパスをカンマや'\'で分割する関数をユニコードでも 対応できるように改修していのですがやり方が分かりません。 関数のロジックはおおよそ以下の通りです。 (仕事先のセキュリティの関係でソースは持ち出せませんので概要ですが・・・) split(str, item, len, words[item][len], delimiter) char* str: 分割対象の文字列 int item:項目数(上限あり) int len:項目の文字数(上限あり) words[item][len]:文字列を分割、項目として格納する配列 char delimiter:区切り文字 int i=0, j=0; while(*str != NULL){ // 文字列を分割する処理 if(str != delimiter){ words[i][j++] = *str } else if{ words[i][j] = NULL i++; j=0; } ・・・・・・・・・ str++; } // 後処理があります VCの設定がマルチバイト対応だったので問題なかったのですが ユニコードに設定を切り替えるとパスの分割でカタカナの「ソ」 を含む文字列が正しく分割されないという事象が発生しました。 関数内の改修だけで解決する方法があるでしょうか? ある程度プロジェクトが動いているのであまり時間をかけないで 対応する必要があります。 OS: Windows7 SP1 環境: VC++ 2008 MFC

  • MFC:リッチエディットからUnicode文字列を受け取りたい

    MFCのダイアログベースでプロジェクトを作成 ↓ プロジェクトのプロパティで「マルチバイト文字セットを使用する」を「Unicode文字セットを使用する」に変更 ↓ エディットボックスとリッチエディット2.0を適当に配置 ↓ エディットボックスとリッチエディット2.0それぞれにコントロール変数を追加 ↓ InitInstance()内に AfxInitRichEdit2(); を追加 ↓ あとは適当なところでエディットボックスとリッチエディット2.0それぞれにGetWindowText関数を使って、記入内容を取得します。     すると、エディットボックスではUnicodeの文字を入れても文字化けしないのに対し、リッチエディット2.0では文字化けしてしまいます。 例えば“Å”の半角文字を(Unicode紹介サイトからコピペする等して)入力すると、エディットボックスではそのまま“Å”なのに、リッチエディット2.0では“A”になります。   ※入力している段階では“Å”と表示されています。GetWindowText関数で取得すると“A”になってしまいます。     リッチエディット2.0からUnicode文字を正常に受け取れる方法はありませんでしょうか。

  • MySQLで日本語を出力すると文字化け(?)します。

    初めまして、MySQLの日本語の取り扱いについて悩んでいます。 この手の質問の過去ログをいろいろ漁ってみて、試してみたのですが、 やり方が悪いのか解決には至りませんでしたので質問させていただきます。 MySQLのバージョンは5.0で、phpMyAdminは2.9です。また、PHPのバージョンは5.1です。 OSはWindwos XPです。 status等で文字コードを確認したところ、以下のようでした。 Server characterset : sjis Db characterset : sjis Client characterset : sjis Conn.characterset : sjis また、phpMyAdminの「MySQLの文字セット」にはUTF-8 Unicode (utf8) とあります(この時点で十分謎です;;)。 このような環境で、以下のようなテーブルを作成し、ブラウザに「日本語。」と出力してみたところ、????と出ました。 どなたかのご教授を得られれば幸いです。 よろしくお願いします。

  • Pythonで非日本語のUnicode文字が使えない

    日本Pythonユーザ会が配布している、Windows用のPython2.6.1を使用していますが、 日本語以外のUnicode文字、アクセントのあるフランス語やウムラウトのあるドイツ語を 「Unicode文字として」扱うと、強制終了してしまいます。 たとえば UTF-8 で保存した test.py   # encoding: utf-8   txt = u"日本語、にほんご、Japanese"   print txt   raw_input() は正しく実行・表示できますが、   # encoding: utf-8   txt = u"Français"   print txt   raw_input() とすると実行しても強制終了されてしまいます。 "u" を外すと "Franテァais" と表示してくれますが…。 どうすればフランス語の文字などを扱えるのでしょうか? Python初心者(1ヶ月程度)ですので、時間があれば、詳しく具体的に教えていただけると助かります。

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

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

    • ベストアンサー
    • PHP
  • ASP.NET での日本語文字列の扱いについて

    .NET については、よく知りません。 そこでお聞きしたいのですが、ASP.NET で日本語を扱う際に、プログラム上で特に意識することはありますか? 私が想像できる範囲では、 ・(ASP.NETに限らないが) ASP で、日本語のエンコードをきっちり指定しておく ・Unicode 以外ならバイト数と文字数の違いを認識しておく ・C# だと、マルチバイト文字列に相当するクラスがある(?) といったところなのですが…

  • 日本語をUnicodeに変換したい

    文字コードを変換したいのですが、 日本語文章をUnicodeに変換する方法 もしくはフリーウェアなどありますか? 例えば、こんにちは と入力して 変換すると、Unicodeで3053,3093,306b,3061,306f という風に変換されるようにしたいのですが。 よろしくお願いします! jAVA,MATLABなら使用可能です。

  • Linuxにてテキストファイル出力の文字コード

    RedHatLinux7.3(2.96-110)、gccバージョン(2.96 20000731)にて、 C言語のアプリケーションを初めて作成しています。 そのアプリ内でテキストファイル(日本語あり)を 作成するのですが、どうも期待どおりの結果になりません。 というのも、出来上がったファイルの文字コードが、 EUCではなくShift-JISになってしまっています。 Linuxで作成したアプリをLinuxで実行するのですから、 出来上がるファイルの文字コードはEUCになるはずですよね? ちなみに、文字コードの確認は「kcc -c XXXXX.log」でおこないました。 もしかして「アプリケーションログを日本語出力する」 なんていうことが、そもそもの過ちなんでしょうか? ファイル出力には、fopen+fprintfを使っています。 どうしてこのような結果になってしまうのか、ご存知のかた、よろしくお願いします。

専門家に質問してみよう