文字コード

コード体系によるコードの違い

「あ」のコード
コード体系 コード
UTF-8 0xE38182
UTF-16 0x3042
Shift_JIS 0x82A0

UCS (Universal multi-octet coded Character Set)

UCSとは、符号化された文字集合の国際標準です。UCSとは|ISO/IEC 10646|Universal multi-octet coded Character Set - 意味/定義 : IT用語辞典

UTF (UCS Transformation Format)

UTFとは、UCS-2やUCS-4で記述された文字列を、バイト列に変換する方式です。これには次の4種類があります。

  • UTF-7 … 7ビットで表現 (メールで使用)
  • UTF-8 … 1文字を1~6バイトの可変長のバイト列に変換
  • UTF-16 … UCS-2の中に、UCS-4の一部の文字を埋め込む
  • UTF-32 … すべてのUCS-4文字を、4バイトで表現
UTFとは|UCS Transformation Format - 意味/定義 : IT用語辞典

UCS-2

UCS-2では個々の文字に2バイトの番号 (コードポイント) を割り当て、0~65,535番までに対応する文字が定められています。これの文字符号化方式には、UTF-8UTF-16やUTF-32などが利用できます。UCS-2とは|BMP|基本多言語面|Universal multi-octet Character Set 2 - 意味/定義 : IT用語辞典

UCS-4

UCS-4は4バイトで定義され、上位のバイトからそれぞれ

  1. 群 (group)
  2. 面 (plane)
  3. 区 (row)
  4. 点 (cell)

と呼ばれます。このうち群00の面00は、UCS-2として定義されています。UCS-4とは|Universal multi-octet Character Set 4 - 意味/定義 : IT用語辞典

Unicode

Unicodeでは、すべての文字はU+0000~U+10FFFFの範囲に割り当てられています。そしてこのUnicode値 (Unicode value) はコードポイント (Code point) と呼称され、

  • UTF-8 … コードポイントがU+7Fまでなら変換せず8bitで、それ以降は値に応じて16~48bit
  • UTF-16 … コードポイントがU+FFFFまでなら変換せず16bitで、それ以降は32bit
  • UTF-32 … コードポイントを変換せず、つねに32bit

の3つのエンコーディング方式により符号化されます。

Find all Unicode characters from Hieroglyphs to Dingbats – Codepoints

UTF-8

下表の規則に従い符号化します。10が指定されている場所はその値に固定で、xの場所にコードポイントのビットを右から詰めていきます。

コードポイントの範囲 (16進数) 符号化後のビット列
00000000~0000007F 0xxxxxxx
00000080~000007FF 110xxxxx 10xxxxxx
00000800~0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
00010000~0010FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
00110000~  
RFC 3629 - UTF-8, a transformation format of ISO 10646
UTF-8への符号化ツール
16進数
2進数

参考

UTF-16

コードポイントがU+FFFFまでの範囲ならばそのまま2バイトで、それ以降のU+10FFFFまでならばサロゲートペアを用いて4バイトで表現します。

サロゲートペア (Surrogate Pair) / 代用対

2バイトの空間に収まらないU+010000~U+10FFFFの文字を、4バイトで表現する方法です。

  • 上位サロゲート (High Surrogates) / 上位2バイト … U+D800 ~ U+DBFF (1024通り)
  • 下位サロゲート (Low Surrogates) / 下位2バイト … U+DC00 ~ U+DFFF (1024通り)
コードポイントとの相互変換
  • H … 上位サロゲート
  • L … 下位サロゲート
  • C … コードポイント

とするとき、コードポイントからサロゲートペアへは、次の式で変換できます。

H = (C - 0x10000) / 0x400 + 0xD800;
L = (C - 0x10000) % 0x400 + 0xDC00;

逆にコードポイントへは、次の式となります。

C = (H - 0xD800) * 0x400 + (L - 0xDC00) + 0x10000;
3.7 Surrogates - Unicode 3.0.0 サロゲートペア - Unicode - Wikipedia
サロゲートペアの変換ツール

参考

UTF-32

コードポイントをそのまま用いて、つねに32bit (4byte) で表現します。

BOM (Byte Order Mark)

BOMとは、エンディアンを示すためにファイルの先頭に記述される値です。UTF-8ではエンディアンは無関係ですが、Unicodeであることを示すために付けられることがあります。BOMとは|Byte Order Mark - 意味/定義 : IT用語辞典

BOMの値
符号化方式 エンコーディング形式 バイト順
UTF-8 UTF-8 EF BB BF
UTF-16 UTF-16, big-endian (UTF-16BE) FE FF
UTF-16, little-endian (UTF-16LE) FF FE
UTF-32 UTF-32, big-endian (UTF-32BE) 00 00 FE FF
UTF-32, little-endian (UTF-32LE) FF FE 00 00
Q: When a BOM is used, is it only in 16-bit Unicode text? - FAQ - UTF-8, UTF-16, UTF-32 & BOM

UTF-16BEはビッグエンディアンですが、ただUTF-16やUTF-32と呼称される場合には、バイト順はそのBOMによって決定されます。Q: What are some of the differences between the UTFs? - FAQ - UTF-8, UTF-16, UTF-32 & BOM

CJK統合漢字 (CJK unified ideographs)

CJK統合漢字 (CJK unified ideographs)

中国語、日本語、韓国語で使用される漢字を統合したもの。CJKはChina、Japan、Koreaの頭文字をとったもの。

CJK統合漢字では、中国語と日本語、韓国語に使われる漢字のうち、字形と文字の意味がよく似ているものを同じ漢字として扱う。このため、日本語の文中に中国語を混ぜたい場合などに不都合があることが指摘されている。

Unicodeでは全部で65,536種類の文字を割り当てられるが、CJK統合漢字はこのうちの20,902文字を使用している

CJK統合漢字 - 意味・説明・解説 : ASCII.jpデジタル用語辞典

絵文字 (emoji)

ブラウザによって表示される画像が異なり、サポートされない絵文字もあります。

サンプル
名称 Unicodeの範囲 表示例
UMBRELLA WITH RAIN DROPS..HOT BEVERAGE Miscellaneous Symbols 2614~2615 ☔ ☕
Regional indicator symbols※1 Enclosed Alphanumeric Supplement 1F1E6~1F1FF 🇦 🇧 🇨 🇩 🇪 🇫 🇬 🇭 🇮 🇯 🇰 🇱 🇲 🇳 🇴 🇵 🇶 🇷 🇸 🇹 🇺 🇻 🇼 🇽 🇾 🇿
SQUARED CJK UNIFIED IDEOGRAPH Enclosed Ideographic Supplement 1F232~1F23A 🈲 🈳 🈴 🈵 🈶 🈷 🈸 🈹 🈺
GRINNING FACE WITH SMILING EYES..NEUTRAL FACE Emoticons 1F601~1F610 😁 😂 😃 😄 😅 😆 😇 😈 😉 😊 😋 😌 😍 😎 😏 😐

サポートされる絵文字のすべては、Full Emoji Data (ページサイズが大きいため、表示に時間がかかることがあります) で確認できます。

※1 国旗はU+1F1E6~から割り当てられている26の文字で、ISO 3166-1 alpha-2で定義されている国コードを表すことで表現します。Regional Indicator Symbol - Wikipedia

種類による区分

種類ごとに分頼された絵文字を、Emoji Annotationsで確認できます。このページでは個々の絵文字の文字コードを、その要素のtitle属性またはリンク先のページで確認できます。

また、📙 Emojipediaでも種類ごとに確認できます。

Unicodeブロック

ブロックとは、Unicodeのコード表を系統だてるための文字の分類です。Block - Glossary

Unicodeブロック UTF-8 UTF-16 文字
Hiragana

Hiragana
ぁ - U+3041 - decodeunicode.org

E38180 3040
E38181 3041
E38182 3042
E38183 3043
   
Katakana

Katakana
゠ - U+30A0 - decodeunicode.org

E382A0 30A0
E382A1 30A1
E382A2 30A2
E382A3 30A3
   
CJK Unified Ideographs

CJK Unified Ideographs
一 - U+4E00 - decodeunicode.org

E4B880 4E00
E4B881 4E01
E4B882 4E02
   
Halfwidth and Fullwidth Forms

Halfwidth and Fullwidth Forms
! - U+FF01 - decodeunicode.org

EFBC80 FF00
EFBC81 FF01
EFBC82 FF02
   

異体字セレクタ (Ideographic Variation Sequence : IVS)

異体字セレクタにより指定された文字を正しく表示するには、それに対応したソフトウェアとフォントが必要です。

お使いの環境によっては正しく表示されません。
コード 表示例 文字参照による表記
表記1 表示例1 表記2 表示例2
U+845BU+E0100 葛󠄀 󠄀 葛󠄀 葛󠄀 葛󠄀
U+845BU+E0101 葛󠄁 󠄁 葛󠄁 葛󠄁 葛󠄁

正規化 (Normalization)

」と「ガ」のように、外見は似ているが異なる文字を統一する方法を考えます。

Shift_JIS (シフトJIS)

Code Page 932 (CP932)

コードページ (Code Page : CP)

コード・ページ (code page)

PC環境において、多国語を効率よく取り扱うために考案された変換テーブル

このコード・ページには、各国語で使用する文字セットや数字、通貨記号などが配置されており、入力されたキーやディスプレイ表示するのがどの文字なのかを決定するために参照される。このためコード・ページを切り替えることで、共通のハードウェアを使用しながら、各国語に対応した処理が可能になる。ただしほとんどのコード・ページにおいて、0x00~0x7Fまでの文字はASCIIキャラクタセットと共通になっている。

多国語対応のために、MS-DOS 3.3以降から組み込まれた。

たとえば日本語処理を行うには、コード・ページを932に設定する。

Insider's Computer Dictionary [コード・ページ] - @IT
コードページの例
  コードページの値
shift-jis 932
Unicode (UTF-7) 65000
Unicode (UTF-8) 65001

コードページの一覧

全角文字 (full width characters)

等幅フォントで表示したときに、縦横比が1:1になる文字のことです。

  • 全角文字 (double byte character set : DBCS)
  • 半角文字 (single byte character set : SBCS)

全角文字によっては対応する半角文字が定義されている場合があり、それらはグリフが似ていますが別の文字です。

全角
(Unicode値)

FF01

FF10

FF21

30A2
半角
(Unicode値)
!
0021
0
0030
A
0041

FF71

文字コードの変換

ツールによる変換

プログラムによる変換

ツール

文字コード表 (Character Map)

Windows付属のツールで、インストールされているフォントの一覧から、文字コードを確認できます。

このツールの実体は、C:\WINDOWS\System32\charmap.exeにあります。