文字コードについて(UTF-8,UTF-16)

UTF(UCSTransformationFormat)とは

UTF-*

Unicode文字のエンコード方法の1つ.Unicodeは,世界中に存在するさまざまな言語の文字を統一して使えるようにするためのコードセット.
UTF-7UTF-8UTF-16などの種類がある.UTF-*は,*ビットの可変長マルチバイトで文字を表現する.

BOM(ByteOrderMark)

BOMは,Unicodeで符号化したテキストの先頭に付与される数バイトのデータの事.Unicodeのデータであることやどの種類の符号化形式を採用しているのかを判別している.(ex.BOM付のUTF-8であれば,先頭の3バイトがBOMであり<0xEF 0xBB 0xBF>となる)

Excelなどのアプリでは,BOM付きでなければ符号化方式がUTF-8なのかUTF-16なのか,あるいは別の文字コードなのか判断できない事がある.
HTMLファイルの場合は,BOM無しで保存するほうが良いとされている.これは,Webページを処理するPHPなどのプログラムがBOM付テキストファイルを正常に処理することができないことがあるから.

BOM付きと無しの違いは,先頭の3バイトがあるか無いかの違い.

UTF-8UTF-16

UTF-8 (8-bit UCS Transformation Format)
UCS-2で定義される文字集合を用いて記述された文字列をバイト列に変換する方式の1つ。1文字を1~6バイトの可変長マルチバイトに変換する。

UTF-16 (16-bit UCS Transformation Format):
UCS-2で定義される文字集合を用いて記述された文字列に、UCS-4の一部の文字を埋め込むためのエンコード方式。UTF-8と併用することができる。UCS-2で利用できる文字数を大幅に増やすことができる。

UCS-2(Universal multi-octet Character Set 2)

Unicodeとほぼ同じもので、UCS(Universal multi-octet coded Character Set)の中のある特定の部分を指し示すものです。UCS-4の群00の面00に配置され、2バイトの値として定義されています。世界の主要な言語で使われる文字のほとんどを収録しています。

UCS(Universal multi-octet Character Set 4)

実際にはUCS-4のことで,UCS-2はUCS-4の一部。UCS-4は4バイトの値で定義され、上位のバイトからそれぞれ群、面、区、点と呼ばれます。現在は群00の面00で定義されているUCS-2のみに文字が配置されていて、それ以外の空間には文字は配置されていません。

UTF-16の場合,2バイトで表現できる文字はそのまま2バイトで表し,それ以外の文字は4バイトで表す.
英数も日本語も全て2バイト.

UTF-8は,英数を1バイト,日本語は3バイトで表現.

つまり,英数の割合が多い場合はUTF-8のほうが効率が良いが,日本語が多い場合はUTF-16のほうが効率が良いといえる.
世界的に見ればUTF-8を標準として使用することが多い.

UTF相互変換をやってる人もいる.
qiita.com