.. include:: ../module.txt .. _section-app-infra-character-code-label: 文字コード =========================================== .. _section-app-infra-character-code-pre-condition-label: 文字コード前提知識 ------------------------------------------- * 文字コードはコンピュータ上で文字を利用するために各文字に割り当てられるバイト表現。 * 文字コードは、以下の3つの概念が含まれる。 .. list-table:: :widths: 30, 50, 20 * - 文字集合(Character Set) - どのような文字が含まれているか - 文字集合 * - コード番号(Character Code) - 各文字に対して付与されているコード番号 - 例) 0x41 * - エンコーディング(Encoding) - どのように文字コード番号を文字に変換するか - 文字符号化方式 * ASCIIとは アメリカの標準化組織であるANSIが1963年に制定した文字コードで、半角英数字、記号、制御文字で構成され合計128種類(7bit)の文字で構成される。 * Unicodeとは 世界中の言語の文字・記号を1つのコード体系に納めた世界統一文字コード * 日本の文字コードとは * 日本では、JIS(日本工業規格)が定める日本の文字コードの規格 * 日本の文字コードは平仮名、片仮名、漢字が含まれる * 現在、JISで定められている文字コード一覧(新JIS標準) .. list-table:: :widths: 30, 50,30,30,30 :header-rows: 1 * - 規格番号 - 通称 - 内容 - 制定年 - 収録文字数 * - 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 | +------------+-----------------+ * 主な文字集合と符号化方式 .. raw:: html
(符号化)文字集合 (文字)符号化方式 主な使われ方
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コード .. raw:: html
(文字)符号化方式 文字集合
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 .. raw:: html
(文字)符号化方式 文字集合
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 .. raw:: html
(文字)符号化方式 文字集合
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の機種依存文字を加えた文字コード) .. raw:: html
(文字)符号化方式 文字集合
Windows-31J Windows機種依存文字、ASCII、JIS X 0208、半角カナ (JIS X 0201)、JIS補助漢字 (JIS X 0212)
| ※Windows-31J のWindows機種依存文字はUnicodeにマッピングされている ■UTF8 .. raw:: html
(文字)符号化方式 文字集合
UTF8 Unicode (ISO/IEC 10646(UCS))
日本語のJIS規格「JIS X 0201、JIS X 0208、JIS X 0212、JIS X 0213」に対応
| .. note:: 各文字コードの詳細については以下も参考のこと。 | `EUCについて `_ | `Shift JISについて `_ | `UTF8について `_ * 機種依存文字 * ある特定の環境・機種(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規格文字として組み込まれている。 .. figure:: img/Image82.JPG :align: center :width: 100% .. note:: JIS X 0208、JIS X 0213については、以下も参考のこと。 * `JIS基本漢字(JIS X 0208)コード表 のサイト `_ * `JIS拡張漢字(JIS X 0213)全コード表 のサイト `_ * インターネット上で利用することのできる文字コード(キャラクタセット) * IANA(「Internet Assigned Numbers Authority」の略)とは ドメイン名、 IPアドレス、 プロトコル番号、インターネット上で利用することのできる文字コード などインターネット資源のグローバルな標準化および 管理を行っている機関(現在は、各種資源のグローバルな管理の役割をICANNが引き継がれている) * 現在、インターネット上で利用することができる主な文字コード * Shift_JIS * EUC-JP * ISO-2022-JP * JIS_X0212-1990 * UTF-8 .. _section-app-infra-character-code-translation-label: 一般的に文字コード変換を考慮するポイント ------------------------------------------------------------------------- .. raw:: html
クライアント アプリケーション(画面) アプリケーション サーバ DB 帳票 他システム連携
JIS X 0213 UTF-8 UTF-16 UTF-8 UTF-8 Shift-JIS EUC-JP
(Windows7) CentOS Soralis

.. _section-app-infra-character-code-translation-example-label: 適切なエンコード指定が必要な箇所の例 ------------------------------------------------------------------------- .. raw:: html
変換ポイント エンコード方法の例
クライアント⇔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 インスタンスを生成

.. _section-app-infra-character-code-java7-label: AP:Java7で使用可能なエンコード ----------------------------------------------------------------- .. raw:: html
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) `_ .. _section-app-infra-character-code-oracle-label: DB:Oracleの日本語環境 --------------------------------------------------------------------- データベースのキャラクタ・セット一覧 .. raw:: html
キャラクタ・セット 説明
JA16EUC EUC 24ビット日本語
JA16EUCTILDE JA16EUCの波形のダッシュとチルドの文字化け対応版
JA16SJIS シフトJIS 16ビット日本語
JA16SJISTILDE シフトJIS 16ビット日本語のダッシュとチルドの文字化け対応版
AL32UTF8 Unicode 5.0 UTF-8ユニバーサル・キャラクタ・セット
JIS X 0213 に対応させたい場合、データベースの文字コードセット(NLS_CHARACTERSET)をAL32UTF8に設定すること. .. raw:: html
キャラクタ・セット 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:: `Oracleのキャラクタ・セットについて `_ .. note:: IBMのAIX機の文字コード  * 各国語サポートのコード・セット(文字集合)を提供する。 * AIXのコード・セット設定はロケールに依存する。 .. raw:: html
コード・セット(文字集合) 言語 国またはカテゴリー ロケール
IBM-eucJP 日本語 EUC ja_JP
IBM-932
(ibm - SJIS)
日本語 PC ja_JP
IBM-943
(ibm - SJIS)
日本語 日本 ja_JP
* 各文字コード構成 <IBM-eucJP > .. raw:: html
対応する文字コード
JISCII JISX0201 グラフィック左文字セット
JISX0201:1976 カタカナ/ひらがなグラフィック右文字セット
JISX0208:1983 漢字レベル 1 および 2 文字セット
IBM-udcJP IBM ユーザー定義可能文字
JISX0212.1990 JIS補助漢字

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

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

<UTF-8> .. raw:: html
対応する文字コード
UTF8 Unicode (ISO/IEC 10646(UCS))
日本語のJIS規格「JIS X 0201、JIS X 0208、JIS X 0212、JIS X 0213」に対応

.. note:: AIXの文字コードについては下記も参照のこと。 | `IBMのAIX機の文字コード `_ | `各文字コードの構成 `_ .. _section-app-infra-character-code-client-label: Client: Windowsの日本語環境 ---------------------------------------------------------------------------- 各Windows Ver 標準の日本語キャラクタセット一覧 .. raw:: html
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の日本語環境について `_