【C/C++】BOM付きUnicode16の判定とファイルの読み込み
.regファイルの中にほしい情報("{”から始まるGUID)がないかサーチするのに以下を使用。
そしたら.regが(BOM付き)Unicode16でうまく読み込んでくれなかったよ。
BOM付きとか誰が作るのよ・・・・。
※一行ずつ読んで、”{”から始まる文字列を取得。
→Guidか調査したり、適切な形に切り出す関数は別に作ってあるので、省略。
.regファイル一行目
「Windows Registry Editor Version 5.00」
を読み込んだ結果が
buf = "y t W \0 i \0 n \0 d \0 o \0 w \0 s \0...."
みたいな感じに。
BOMついてる上にマルチバイトになっちゃってる・・・。
文字列とか、文字コードとか嫌い(・ω・`)
てことで、以下で書き換え。
↓ ↓ ↓
もうバイナリモードで開けばいいじゃない!!
欲しいのはGUIDの英数字文字列だけだもん!!
一行目読み込んだ時のbuf[0](BOMの部分)が空白になるけど、今回はそんなに厳密に文字列使ったりしないからいいや!!
今回はBOMついてたらUTF-16っていう謎判定をしてるけど、そこら辺のメモだからご愛嬌。
ファイル固定なので、とりあえずこれで。そのうちエンディアン合わせのコード追加しなきゃ!