Windows10
C言語のソースファイルの文字コードってみなさん何を使っていますか?

私は基本的にWindowsが好きなのでWindowsをメインにして、必要なときにLinuxやMacを使うような感じです。

Windowsで使うことだけを考えればShift-JISでも一番楽なのですが、LinuxやMacなどはShift-JISに対応していないので文字化けなどが起こってしまい困ったことになります。

色々調べて考えてみた結果、とりあえず当分はUTF-8のBOM付きでソースファイルの文字コードを統一してみようと思います。

 

 

UTF-8(BOM有)を採用した理由

WindowsとLinuxのどちらの環境でも上手く行く方法はないか考えると、標準文字コードになりつつあるUTF-8しかありません。

UTF-8にはBOM無しとBOM有りの二種類のタイプがあり、BOM(Byte Orer Mark)とは符号化方式がUnicodeであることやエンディアンの違いを区別するためのデータをファイルの先頭に3バイトのデータとして付与したものです。

文字コードの誤認を解消できる一方で、このBOMが問題でプログラムが正しく動作しないことがあり、現在はBOM無しのUTF-8が主流になっているようです。

BOMの悪評は有名で?随分前からテキストファイルなどは、BOM無しUTF-8で保存するようにしています。

バイトオーダーマーク – Wikipedia

本題に戻って、Windowsで主流なIDEのVisual Studioは、UTF-8のBOM無しの場合に文字化けやコンパイルエラーが起こります。(Visual Studio Community 2015 Version 14.0 Update 2で確認)

世界の主流な流れとは異なりますがBOM無しに対応していないのであれば仕方がないですね。

 

Linuxのgccはバージョン4.3x以降からBOM有りのUTF-8に対応したらしく、実際にLinuxのgccでUTF-8(BOM有)のC言語ソースファイルをコンパイルさせてみたところ問題なく実行ファイルが作成されました。

ということで、これでUTF-8(BOM有)であればソースファイルの共有が可能であることが自分の環境で確認できました。

Windows側の設定

ソースファイル共有の準備として、まずはメインで使うWindows側での設定です。

WindowsでC言語プログラムを記述する際に、EmacsとVisual Studioを利用するのでそれぞれ設定していきます。

Emacsの設定

;;ファイル種別と文字コードを関連付け(最優先)
(modify-coding-system-alist 'file "\\.c\\'" 'utf-8-with-signature-dos)
(modify-coding-system-alist 'file "\\.cpp\\'" 'utf-8-with-signature-dos)  

基本的な設定にはUTF-8(BOM無)に設定していますが、.cと.cppの拡張子のファイルのみUTF-8(BOM有)として保存するように設定を追加します。

Visual Studioの設定

Visual Studio拡張機能  ForceUTF8 with BOM

Visual Studioで新規作成されたソースファイルの文字コードを確認してみると、やはりShift-JISで記録されていました。

このままでは新規作成する度に文字コードを変換する必要が出てきます。

バッチファイルを作成してスケジュールを組ませるなどで自動化させることもできますが、なかなかに面倒でスケジュールのタイミングによっては変換されてないこともありえそう。

何かいい方法はないかと調べてみると素敵な拡張機能「ForceUTF8 (with BOM) 」がVisual Studio Galleryの方に公開されていました。

ForceUTF8 (with BOM) 拡張機能

作者の方のウェブページを確認すると下記の拡張機能を一部改変したものだそうです。

ForceUTF8 拡張機能

こちらの拡張機能インストール後、新たに作成したファイルの文字コードを確認すると無事UTF-8(BOM付)で保存できました。

Linux側の設定

Linuxでは主にEmacsを使ってプログラミングするため、WindowsのEmacsで追加した設定を利用します。

Emacsの設定

;;ファイル種別と文字コードを関連付け(最優先)
(modify-coding-system-alist 'file "\\.c\\'" 'utf-8-with-signature-dos)
(modify-coding-system-alist 'file "\\.cpp\\'" 'utf-8-with-signature-dos)  

私の環境ではEmacsの設定ファイルは、Windowsと同期させているので実際には設定を追加していません。

 

普段使っているWindowsで作成したプログラムをLinux側で利用する際に文字化けなどのエラーが発生して煩わしかったのですが、文字コードを統一してみたので少しは楽になるのではないかと思います。

実際に使ってみてなにか不便があったら加筆修正なり、新たな記事に書き起こそうと思います。

 

C言語ソースの文字コードをUTF-8(BOM付)に統一してみる
Tagged on:             

コメントを残す