文字コード

文字コード前提知識

  • 文字コードはコンピュータ上で文字を利用するために各文字に割り当てられるバイト表現。
  • 文字コードは、以下の3つの概念が含まれる。
文字集合(Character Set) どのような文字が含まれているか 文字集合
コード番号(Character Code) 各文字に対して付与されているコード番号 例) 0x41
エンコーディング(Encoding) どのように文字コード番号を文字に変換するか 文字符号化方式
  • ASCIIとは

アメリカの標準化組織であるANSIが1963年に制定した文字コードで、半角英数字、記号、制御文字で構成され合計128種類(7bit)の文字で構成される。

  • Unicodeとは

世界中の言語の文字・記号を1つのコード体系に納めた世界統一文字コード

  • 日本の文字コードとは

    • 日本では、JIS(日本工業規格)が定める日本の文字コードの規格
    • 日本の文字コードは平仮名、片仮名、漢字が含まれる
    • 現在、JISで定められている文字コード一覧(新JIS標準)
規格番号 通称 内容 制定年 収録文字数
JIS X 0201 ANK 半角英数、半角片仮名 1969年 191字
JIS X 0208 JIS基本漢字 平仮名、片仮名、漢字、全角記号などの2バイト文字 1978年 6,879字
JIS X 0212 JIS補助漢字 第3水準の漢字および非漢字(使用頻度が低い) 1990年 6,067字
JIS X 0221 UCS ISO/IEC 10646に対応するJIS規格(Unicode) 1995年 96,447字
JIS X 0213 JIS拡張漢字 JIS X 0208の6,879字に加え、第3,4水準の漢字、非漢字を追加 2000年 11,233字

JIS規格は基本的に5年ごとに見直されることになっており、JISの同規格番号の中にも幾つかの版がある。

JIS X 0208 JIS X 0208:1978
JIS X 0208:1983
JIS X 0208:1990
JIS X 0208:1997
JIS X 0208:2012
JIS X 0213 JIS X 0213:2000
JIS X 0213:2004
JIS X 0213:2012
  • 主な文字集合と符号化方式
(符号化)文字集合 (文字)符号化方式 主な使われ方
JIS X 0208
(日本語の文字集合)
ISO-2022-JP 主にメールの世界で使用 (JISコードと呼ばれる)
EUC-JP 主にUNIX/Linuxの世界で使用
Shift_JIS パソコンにおいて圧倒的な普及度がある
MS932 (Windowsー31J、CP932) 主にWindowsで使用(Shift-JIS + Windows機種依存文字)
…etc
JIS X 0213
(日本語の文字集合)
ISO-2022-JP-3 ※ 上記、JIS X 0208 同様
EUCーJISX0213
Shift_JISX0213
…etc
Unicode文字集合
(世界統一文字集合)
UTF-8
UTF-16
UTF-32
…etc

  • 文字符号化方式と対応する文字集合の詳細

■JISコード

(文字)符号化方式 文字集合
ISO-2022-JP ASCII(ISO/IEC 646 IRV)
JIS X 0201:1976(ローマ字部分)
JIS X 0208:1978(JIS C 6226-1978)
JIS X 0208:1983
ISO-2022-JP-1 JIS X 0212:1990
ISO-2022-JP-2004 JIS X 0213:2004 第1面
JIS X 0213:2004 第2面

■EUC

(文字)符号化方式 文字集合
EUC-JP ASCII、JIS X 0208、半角カナ (JIS X 0201)、JIS補助漢字 (JIS X 0212)
EUC-JIS-2000 ASCII、JIS X 0213:2000、半角カナ (JIS X 0201)、JIS補助漢字 (JIS X 0212)
EUC-JIS-2004 ASCII、JIS X 0213:2004、半角カナ (JIS X 0201)、JIS補助漢字 (JIS X 0212)

■Shift JIS

(文字)符号化方式 文字集合
Shift_JIS ASCII、JIS X 0208:1990、半角カナ (JIS X 0201:1997)
Shift_JIS-2000 ASCII、JIS X 0213:2000、半角カナ (JIS X 0201)
Shift_JIS-2004 ASCII、JIS X 0213:2004、半角カナ (JIS X 0201)

■CP932、Windows-31J,MS932(IS X 0208にWindowsの機種依存文字を加えた文字コード)

(文字)符号化方式 文字集合
Windows-31J Windows機種依存文字、ASCII、JIS X 0208、半角カナ (JIS X 0201)、JIS補助漢字 (JIS X 0212)
※Windows-31J のWindows機種依存文字はUnicodeにマッピングされている

■UTF8

(文字)符号化方式 文字集合
UTF8 Unicode (ISO/IEC 10646(UCS))
日本語のJIS規格「JIS X 0201、JIS X 0208、JIS X 0212、JIS X 0213」に対応

Note

各文字コードの詳細については以下も参考のこと。

  • 機種依存文字
    • ある特定の環境・機種(MacやPC/AT、PC-98やUNIXなど)でしか正しく表示されない文字のこと(Windows機種依存、IBM機種依存、NEC機種依存…)
    • 機種依存文字問題とは、日本語環境においてはJIS規格に規定されていないために発生する問題
    • 機種依存文字のほとんどが、Unicodeに含まれる文字のため、Unicodeを採用した環境では基本的に機種依存文字問題は発生しない

Note

過去、機種依存文字とされていたJIS規格文字以外の文字のほとんどが、「JIS X 2013」においてはJIS規定文字として組み込まれており、JIS標準文字となる。例えば、下記の文字は過去のJIS規格には含まれていなかったが、一部は「JIS X 2008」、残り全ては「JIS X 2013」でJIS規格文字として組み込まれている。

../../_images/Image82.JPG

Note

JIS X 0208、JIS X 0213については、以下も参考のこと。

  • インターネット上で利用することのできる文字コード(キャラクタセット)

    • IANA(「Internet Assigned Numbers Authority」の略)とは

      ドメイン名、 IPアドレス、 プロトコル番号、インターネット上で利用することのできる文字コード などインターネット資源のグローバルな標準化および 管理を行っている機関(現在は、各種資源のグローバルな管理の役割をICANNが引き継がれている)

    • 現在、インターネット上で利用することができる主な文字コード

      • Shift_JIS
      • EUC-JP
      • ISO-2022-JP
      • JIS_X0212-1990
      • UTF-8

一般的に文字コード変換を考慮するポイント

クライアント アプリケーション(画面) アプリケーション サーバ DB 帳票 他システム連携
JIS X 0213 UTF-8 UTF-16 UTF-8 UTF-8 Shift-JIS EUC-JP
(Windows7) CentOS Soralis

適切なエンコード指定が必要な箇所の例

変換ポイント エンコード方法の例
クライアント⇔WebサーバHTTP通信 JSPのタグでcharasetを「UTF-8」を指定
<'%@ page contentType="text/html;charset=UTF-8"pageEncoding="UTF-8" %>
request.setCharacterEncoding(UTF-8);
response.setContentType("text/html; charset=UTF-8");
APサーバ⇔DB JDBCが Java VMで使用されるUnicode16 とDBの文字コードの差異を吸収するため、アプリ側は何もしなくていい※但し、DBの文字コードに存在しない文字でDBを更新した場合、文字消失する。
APサーバ⇔帳票 帳票のフォームファイルのエンコード指定がSJISの場合、帳票ミドルウェアの文字コード変換機能を使用
APサーバ⇔ファイルアップロード/ファイルダウンロード アップロード(Windows端末 ⇒ Webサーバー)は ShiftJIS から UTF-8
ダウンロード(APサーバー ⇒ Widndows端末)は、UTF-8 から Shift-JIS
DPサーバ⇔外部接続システム連携 UTF-8⇔EUC-JP変換
※HULFT等のミドルウェアで文字コード変換して電文を送受信
メッセージ(ログなど) <メッセージプロパティを使用する場合>
1. application-messages.propertiesをUTF8で生成、日本語などのメッセージを直接記入
(native2asciiでISO-8859-1に変換しなくてよい)
2. applicationContext.xmlで、ResourceBundleMessageSource に読み込む文字コード
メッセージファイル(application-messages.properties)を指定する


logback.xmlのログの文字コード指定等
メール 文字コードを指定して、MimeMessageHelper インスタンスを生成

AP:Java7で使用可能なエンコード

Canonical Name Description
Shift_JIS Shift-JIS, Japanese
x-SJIS_0213 Shift_JISX0213
EUC-JP JISX 0201, 0208 and 0212, EUC encoding Japanese
ISO-2022-JP JIS X 0201, 0208, in ISO 2022 form, Japanese
UTF-8 8-bit Unicode (or UCS) Transformation Format
ISO-8859-1 ISO-8859-1, Latin Alphabet No. 1
※古いバージョンのServlet仕様(Servlet 2.3)では、エンコードの指定がなかった場合、デフォルトで選択される文字コード

Note

公式サイトも参照のこと。

OracleのJava7のサイト (Supported Encodings)

DB:Oracleの日本語環境

データベースのキャラクタ・セット一覧
キャラクタ・セット 説明
JA16EUC EUC 24ビット日本語
JA16EUCTILDE JA16EUCの波形のダッシュとチルドの文字化け対応版
JA16SJIS シフトJIS 16ビット日本語
JA16SJISTILDE シフトJIS 16ビット日本語のダッシュとチルドの文字化け対応版
AL32UTF8 Unicode 5.0 UTF-8ユニバーサル・キャラクタ・セット

JIS X 0213 に対応させたい場合、データベースの文字コードセット(NLS_CHARACTERSET)をAL32UTF8に設定すること.

キャラクタ・セット DBのバージョン
9.2.0 10.1.0 10.2.0 11.2.0 11.2.0
UTF8 3.0
AL32UTF8 3.1 3.2 4.0 5.0

Note

IBMのAIX機の文字コード

  • 各国語サポートのコード・セット(文字集合)を提供する。
  • AIXのコード・セット設定はロケールに依存する。
コード・セット(文字集合) 言語 国またはカテゴリー ロケール
IBM-eucJP 日本語 EUC ja_JP
IBM-932
(ibm - SJIS)
日本語 PC ja_JP
IBM-943
(ibm - SJIS)
日本語 日本 ja_JP
  • 各文字コード構成

<IBM-eucJP >

対応する文字コード
JISCII JISX0201 グラフィック左文字セット
JISX0201:1976 カタカナ/ひらがなグラフィック右文字セット
JISX0208:1983 漢字レベル 1 および 2 文字セット
IBM-udcJP IBM ユーザー定義可能文字
JISX0212.1990 JIS補助漢字

<IBM-932>
対応する文字コード
JISCII JISX0201 グラフィック左文字セット
JISX0201:1976 カタカナ/ひらがなグラフィック右文字セット
JISX0208:1983 漢字レベル 1 および 2 文字セット
IBM-udcJP ユーザー定義可能文字と、NEC の IBM 選択文字および NEC 選択文字

<IBM-943>

対応する文字コード
JISCII JISX0201 グラフィック左文字セット
JISX0201:1976 カタカナ/ひらがなグラフィック右文字セット
JISX0208:1990 漢字レベル 1 および 2 文字セット
IBM-udcJP ユーザー定義可能文字と、NEC の IBM 選択文字および NEC 選択文字

<UTF-8>

対応する文字コード
UTF8 Unicode (ISO/IEC 10646(UCS))
日本語のJIS規格「JIS X 0201、JIS X 0208、JIS X 0212、JIS X 0213」に対応

Note

AIXの文字コードについては下記も参照のこと。

Client: Windowsの日本語環境

各Windows Ver 標準の日本語キャラクタセット一覧

Windows 各バージョン 標準キャラクタセット
Windows 95 JIX X 0208 - ?
Windows 98 JIX X 0208 - ?,JIS X 0212
Windows Me JIX X 0208 - ?
Windows NT WS JIX X 0208 - ?,JIS X 0212
Windows NT SV JIX X 0208 - ?,JIS X 0212
Windows 2000 Professional JIS X 0221-1995
Windows 2000 Server ファミリー JIS X 0221-1995
Windows XP JIS X 0208 および JIS X 0212
Windows Vista JIS X 0213:2004
Windows 7 JIS X 0213:2004(通称:JIS2004)

Note

Windowsの文字コードは以下を参照のこと。

Microsoft のWindowsの日本語環境について