UTF-8とUTF-8N
今日は天気も悪く、特に出かける用事もなかったので、部屋に引きこもり(笑)。
せっかくなので、かねてから思っていたツール作成をすることに。
自宅のサーバー(FreeBSD)で使うファイル解析のツールなのですが、バイナリデータを扱うので「C」で書くことに。サーバーのロケールを「UTF-8」にしているので、ソースファイルの文字コードを「UTF-8」にして保存(編集はWindowsでやってたので)。サーバーにアップしてコンパイル。
コンパイルエラー(||li ̄▽ ̄li)
「ま、そんなもんさ」と笑いながらエラーを取るが、なかなか取れない。というか、1行目でエラー。それも、ヘッダファイルとソースファイルの両方とも。まてまて、ヘッダファイルの1行目はコメント行だし、ソースファイルだってお決まりの「#include <stdio.h>」なのだが…。よくよくエラーメッセージを見ると、見慣れないエラーメッセージ(下記3行。ファイル名は割愛w)。
error: stray ‘\357’ in program
error: stray ‘\273’ in program
error: stray ‘\277’ in program
早速、ググる。で、ファイルの文字コードに起因するエラーだということが判明。さらにそこからリンクが張られていた四元輝博さんのブログ「シリコンバレー24時」の記事(http://www.skymerica.com/blog/yotsumoto/arch/2007/05/08/000765.html )を辿り、ファイルの文字コードを「UTF-8」ではなく、「UTF-8N」で保存すればよいという解決策を見て、その通りに保存、再びコンパイルを通すと、無事完了。とりあえず、ツールはファイルフォーマットの調査で今日は終了として、ついでに四元さんのブログからUTF-8についての調査記録を読んだ。
ウィキペディアにも書かれているのだが、「UTF-8」には「UTF-8」と「UTF-8N」の2つが存在し、「BOM」が付くものを「UTF-8」、付かないものを「UTF-8N」としているそうである。ただし、これは日本国内のみであり、国際的には認知されていない仕様だそう。つまり「方言」ですな。しかも、この「BOM」の有無でアプリケーションの挙動にも変化があるそうです。
いやぁ、仕事だけでプログラム書いてたら、お目にかかれなかったんだろうな(笑)。
| 固定リンク | 0
「パソコン・インターネット」カテゴリの記事
- 「VMware Workstation」、「VMware Fusion」が完全無償化(2024.11.13)
- ノジマ、VAIO株式会社を111億円で買収(2024.11.11)
- Amazonロッカー(2024.11.01)
- 「Office 2024」発売(2024.10.02)
- 楽譜作成ソフト「Finale」、開発終了(2024.08.28)
コメント
よく、この古い記事にたどり着きましたね(笑)。
UTF-8のこの仕様には泣かされますね。Windowsとそれ以外(OS的にはUnix環境、ソフト的にはオープンソフト)とで扱いが分かれるんですよね。
ちなみに、純粋にWindowsだけで動かす(作る)もので、UTF-8を使うのなら(って、今はほとんどこうだろうけど)「BOM付き」、Windows以外でも動かすなら「BOM無し」と覚えていれば、ほぼ間違いないです。
例え、Windows上で動かすにしてもPythonやRubyといったオープンソース開発の言語(やツール)に使う場合はBOM無しでないと引っかかることが多いです。
投稿: あ~かいば | 2016年8月 2日 (火) 21時52分
ほ,仏さまッ(笑)
Hello, world!の段階でとん挫してもうCはあきらめようと思ってました.
文字コードの些細な違いになんて気づきもしませんでしたわ...
本当に助かりました
投稿: Bの補集合 | 2016年8月 2日 (火) 16時30分