忘れる前に覚書。優しい文章を目指します。
ザ・覚書 ザ・覚書
出来るだけ子供にも、わかりやすいように書いて行きたいと思います。

PCバージョンでサイトを表示しています。

【ザ・覚書 3クリックアンケート実施中】
暑さの一番の原因はなんだと思いますか?
あなたの支持する政党はどの党ですか?
ページを見て下さって、 ありがとうございます。この内容に関する情報があれば下の掲示板にでも書き込み下さい。

C言語 UTF-8のファイル操作


  スポンサーリンク

☆C言語 UTF-8のファイル操作
今のページの関連ページのリストへ
ザ・覚書のトップページに戻る

VisualCで、文字コードUTF-8の読み込み書き込みを行いたい時に、
結構、悩んだ事があったのでメモしておきます。
わかれば簡単な事ではあったのですが。


色々悩んだ挙句の結果を書くと・・・。


デフォルトの環境では、
Cソースコードは、おそらく、
s-jisで記述されている。

VisualC2015で見ると、
「プロジェクトの設定」の「全般」の文字セットは、
デフォルトで、Unicode文字セットとなっている。
(昔のVCには、この設定はなかったような気がするが、201X辺りから現れた記憶。
たぶん、昔のプロジェクトを新版に切り替えて行くと、「空白」=「設定なし」になると思われる。)

Unicode(ユニコード)とは、
世界で使われる全ての文字を共通の文字集合にて利用できるようにしようという考えで
作られたらしい。

「マルチバイト文字セット」使わない。
(普通、作ったUTF-8ファイルは、Unicodeと思われる。)

調べてみると、
「プロジェクトの設定」の「全般」の文字セットは、
「空白」=「設定なし」の場合は、
ANSI版になるとの事らしい。

ANSIとは、Shift_JIS が拡張されたものらしい。


私の場合、これで動かしました。

文字セット「設定なし」で、UTF-8のファイルを読んでも
問題なく処理は出来た。
(ちなみにデフォルト値のUnicode文字セットでも出力ファイルは同じ結果になった。)


この状態でコードをコンパイルすると、
読み込んだファイルは、UTF-8として読むが、
ソース内記述の全角文字は、s-jisとして扱われる。

例えば、(変数宣言略)

fopen_s(&fpLoad, szFileName1, "r");
fopen_s(&fpWrite szFileName2, "r");

while (fgets(szBuf, sizeof(szBuf), fpLoad) != NULL)
{
fprintf(fpWrite, "%s\n", "szBuf");
}

fprintf(fpWrite, "もじもじ\n");

fclose(&fpLoad);
fclose(&fpWrite);


などすると、
ファイルから読み込んだszBufは、UTF-8だが、
「もじもじ」が、s-jisで書き込まれ、
UTF-8とs-jisが混合したテキストファイルが出来てしまう。

これを回避するには、
ソース内記述の全角文字を、UTF-8に変換してから書き出す。


ShiftJisToUTF8(szBuf2, sizeof(szBuf2), "もじもじ" ); ← 自作関数
fprintf(fpWrite, "%s\n", szBuf2);




他の方法として、

#pragma execution_character_set("utf-8")

を書く方法もあり、
ソース内記述の文字列をUTF-8にする模様。

これをすればソース内記述のfprintf("もじもじ")などは文字化けしないが、
私のプロジェクトの場合、タイトルバーの文字化けが発生してしまった。
メニューは正常。
これは直し方が今はわからない。(タイトルバー文字列だけs-jisに直す必要性?)

他にもどんな問題が発生するかわからないので、
これは使わなかった。

雑記、


fopen_s(&fpLoad, szFileName1, "w, ccs=UTF-8");

などでopenを試したが、どうも挙動不審になった。
コードが悪かったのか、フリーズすることもあり、
これも使用しなかった。、


ちなみに、デバッグ時に、読み込んだUTF-8の文字は、
普通なら文字化けして見える。
文字を普通に表示させたい場合、ウォッチで変数の後に ,s8 を入れると
読める文字になる。

記述:2017年03月頃

(一言掲示板は、下の方にあります。)

Twitter Facebook Google+ はてな Pocket LINE


  スポンサーリンク


Amazonで『プログラミング C言語』を検索
今のページの関連ページのリストへ
ザ・覚書のトップページに戻る
全ページのリストへ

苦しんで覚えるC言語

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新・明解C言語 入門編 (明解シリーズ)

Cディレクティブ入門: もうひとつのCプログラミング

プログラミング言語C 第2版 ANSI規格準拠

C言語で学ぶ コンピュータ科学とプログラミング
amazonで検索
商品更新日時:
2017/03/27 03:29:37

12歳からはじめるゼロからのC言語ゲームプログラミング教室【電子書籍】[ 大槻有一郎 ]

13歳からはじめるゼロからのC言語ゲームプログラミング教室 初級編【電子書籍】[ 大槻有一朗 ]

開発ツールを使って学ぶ!C言語プログラミング【電子書籍】[ 坂井 弘亮 ]

猫でもわかるC言語プログラミング 第3版【電子書籍】[ 粂井 康孝 ]

コンピュータのしくみがよくわかる! C言語プログラミングなるほど実験室【電子書籍】[ 矢沢久雄 ]

C言語で学ぶ コンピュータ科学とプログラミング【電子書籍】[ 小高 知宏 ]
楽天ウェブサービスセンター
商品更新日時:
2017/03/28 00:58:30

一言掲示板です。なにかありましたら以下に書いて書き込みボタンを押して下さい。
管理人による書き込みの確認後、荒らし書き込みでない場合に表示させていただきます。
悪意ある書き込みや挑発的な書き込みと思われる内容は、表示させません。
その為、ちょっと書き込みから表示までに時間がかかってしまいます。ご了承下さい。

(新機能)URLの書き込みも可能にしましたが、内容と関係のないリンクの表示はしないと思います。
また自サイトへのリンクURL書き込みの場合、相互リンクもお願い致します。
お名前

コメント


<No.2> 管理者
情報ありがとうございます。

確認すると、
2015では、デフォルトで「Unicode文字セット」のようですね。
修正しておきます。

visual C6から変換したプロジェクトをずっと使っていて、
それでは、文字セットは、空白になり、
デフォルトで、指定なし、設定なしと書いてしまいました。

指定なしは、調べるとANSI版になるとの事らしいので書いておきます。

(2017/03/09)

<No.1> 名無しさん
>「プロジェクトの設定」の「全般」の文字セットは、
>「空白」=「指定なし」がデフォルトで、
>この場合、「Unicode文字セット」が使われる。
デフォルトは指定なしじゃないし、指定なし=Unicodeでもない
(2017/03/09)





本日、よく見られるページ
EXCEL(エクセル)で日本地図
「~をば」ってどういう意味?
おへその位置がずれる原因は?
188日周期で大きな地震が起こっているらしい
労働者が、会社を訴える時の手続き方法
地球から月までの距離
家庭用の普通のコンセントは、何Wまで使えるのか?
2011年03月11日 地震覚書 14時47分~16時02分
2013年 カネボウ化粧品 白斑 自主回収
2013年 ノートンインターネットセキュリティとノートンセキュリティの違い
  スポンサーリンク

今のページの関連ページのリストへ
ザ・覚書のトップページに戻る
全ページのリストへ