何があった
emacs+gccで書いてたコードをVisualStudio 2010に持っていったらコンパイルできない! 割と意味不明なエラーでコンパイルできない! 定数が二行目に続いてますってなんだ!
で、原因はやっぱり文字コードっぽい。だって特定の文字に反応してるっぽいんだもん。
日本語使わない
究極的にはこれが一番確実っぽい。要は2バイト文字を排除してASCII文字だけでプログラム書きましょうって話。なので、表示するメッセージ類も全部英語に・・・。言うても短いメッセージだけだしそんなに困りませんけど・・・。
BOMについて
UTF-8といってもBOMがあるとか無いとかって言う話があるらしいです。BOM(Byte order mark)はファイルの先頭に付く3バイトのコードで、このファイルがUTF-8であることを表すために付くことがあるらしい。BOMなしはUTF-8Uと表記されるようです。単純にUTF-8って言った場合はBOM有りを指すのが厳密なところみたいだけど、みんながみんなこのルール守ってるとも限らないので注意。
gccとclはBOM対応?
一般的に、BOMはないほうがいいみたいな話もあるのですが、調べてみるとgccもclもBOM付きUTF-8に対応してるっぽい。むしろclはBOM無し読めないみたい。なんかgccはBOM有りNGみたいな情報もありましたが、現段階ではもう直ってるっぽい。emacsもきっとBOM有りで大丈夫。
Ubuntu上でBOMつける
ということで、UTF-8のソースコードは全てBOMを付けてしまえば大丈夫ってことらしい。やったね!
とりまubuntu上でUTF-8UからUTF-8Bへの変換はこちら
$nkf -W8 -w8B --in-place <入力ファイル名>
-W8で入力フォーマットを仮定し、-w8Bで出力フォーマットを指定。--in-placeでオリジナルのファイルを書き換えるように指定。
uconvでもできるけど、変換してそのまま上書き見たいなことはできないっぽい?
BOMあるかわからない場合は
$file <調べたいファイル名>
でBOMあるかわかる。
findコマンドと併用することで、任意のディレクトリからBOM無いUTF-8のコード探してきてBOM付加みたいなこともできるみたい。
2014/01/03追記
入力文字コードを指定しないほうがいいのかもしれない
windowsでBOMつける
変換したいファイルをメモ帳で開いて上書き保存するだけ。マジで。
なんか、メモ帳が"UTF-8を保存するときは勝手にBOMつける"みたいなハタ迷惑な仕様みたいで、それを利用します。
環境とか
一応試した環境のっけときます