見出し画像

【ITエンジニア】文字コードについて調べてみる

こんにちは、エンジニア教育のスクータムです。
生徒さんが入ってきまして、色々と教えている最中なのですが…
そういえば、文字コードは盲点になりやすいなあ、と気づきました。

知っていそうで知らない文字コードについて、改めて調べてみることにしました。

文字コードとは

書籍とかは持っていないので、こういった規格を定めている組織などを調べてみました。

とほほの文字コード入門 - とほほのWWW入門

いつものとほほシリーズ。かなり色々と書いているので、ここから調査開始。
色々あるのだが、全部見ていると大変なので、いつもお世話になっているUTF-8について調べてみることに。

まず、前提として、UTF-8などの符号方式をまとめる体系として、Unicodeがあるとのこと。それらをまとめる組織として、ユニコードコンソーシアムがるとのこと。

What is Unicode? in Japanese

まずはUnicodeについて。

ユニコードは、プラットフォームに係わらず、プログラムに係わらず、言語に係わらず、すべての文字に独立した番号を与えます。ユニコード標準は、アップル、ヒューレットパッカード、IBM、ジャストシステム、マイクロソフト、オラクル、SAP、サン、サイベースなどの産業界の主導的企業と他の多くの企業に採用されています。ユニコードは、XML、Java、ECMAScript(JavaScript)、LDAP、CORBA 3.0などの最先端の標準の前提となっており、ユニコードを実装すれば、ISO/IEC 10646に適合することになります。ユニコードは、多くのオペレーティングシステムとすべての最新のブラウザーと他の多くの製品でサポートされています。ユニコード標準の出現とユニコードをサポートするツール類は、昨今顕著になっているソフトウエア技術のグローバル化の流れに対して、特に役に立っています。

ユニコードコンソーシアム公式サイトより

同時にISOの規格も満たせるとのこと、全然知らなかった…
Unicodeはとりあえずわかったので、UTF-8を見てみます。

どうも厳密な仕様が見つからず…(有識者がいれば教えてください)
妥協してWikipediaを見ました。

UTF-8 - Wikipedia

ASCII文字と互換性を持たせるために、ASCIIと同じ部分は1バイト、その他の部分を2–6バイトで符号化する。4バイトのシーケンスでは21ビット (0x1FFFFF) まで表現することができるが、Unicodeの範囲外となる17面以降を表すもの(U+10FFFFより大きなもの)は受け付けない。

Wikipediaより

まあ、こんな体系があるのだな…くらいの認識です。
(よく使うのですが、なぜよく使うのかまできちんと理解しきれず…有識者の知見求む)

文字コードがらみのトラブル

マルチバイト文字が扱えなかった

よくあるトラブルがマルチバイト文字…特に、非常用漢字だと思います。
非常用漢字だと4byteつかうことがあり、対応していないミドルウェアでエラーが起きてしまいます。

(肝心のミドルウェアの文字コードを失念)

筆者が経験したのは、このケースでした。

あとは、ファイルインポート機能を提供すると、shift JISでインポートしてエラーが起こるなど。この場合は、ファイルの文字コード変換をアプリケーションでやってあげる必要があります。

対応(体験談)

普段のテキストエディタでは当然のようにUTF-8にしています。gitとかで統一とかできるんでしょうか?改行コードは検証できたような記憶があるのですが…

あとは、当然ながら異常系のロギングをきちんと取っておくこと!!
「文字コードによるエラーなら、常用漢字で対応すればいい」となりますので。

文字コードの対応は横断的な関心ごとなので、いいタイミングで共通モジュールを持っておくといい印象です。

ベストな対応はなんだろう?

ざっと調べて見たのですが、良き記事が見つからず。
こちらをあとでなんとなく見てみようかなと思いました。

私が遭遇した文字コードにまつわる7つの迷信 #新人プログラマ応援 - Qiita

まとめ

文字コードにまつわる処理をまとめてみました。
ちょっとまだ理解があいまいなので、また今度さらに調べるかもしれません。

宣伝

プログラミングスクール「autengineer」

エンジニア向けの教育を提供しています!

クラウドエンジニア
Webエンジニア
に関心があれば、お問いあわせください!

サポートいただけますと幸いです。さらなる励みにして精進します。