はじめに †
ARIBコードへまたはARIBから各種の文字コードを変換するOSSの文字コード変換ツールは、今までいくつか存在していましたが、汎用性と機能が不十分でした。
しかしながら、LinuxTVにおいて、Linuxの各ディストリビューションの標準的パッケージとして含まれるiconvコマンドおよびglibc内の文字変換モジュールiconvに対応した、
ARIB 8単位コードに対応させる拡張モジュールがAkihiro TSUKADA氏により開発、公開されました。
http://www.linuxtv.org/
http://git.linuxtv.org/cgit.cgi/v4l-utils.git/tree/contrib/gconv
https://patchwork.linuxtv.org/patch/30438/
このページでは、上記のコードを単独のgconvモジュールとしてRHELまたはCentOS用にインストールするためのRPMを公開しています。
これはLGPLに基づくものです。
iconvとは †
iconv(International Codeset Conversion Library)は異なる文字コード間の相互変換を行う標準API。または、そのAPIに付属する文字コード変換プログラムです。
iconvは最初にHP-UXで開発され、後にPOSIX規格として標準化されました。
GNUのCライブラリにはフリー版のiconvが含まれ、Linuxディストリビューションは、GNUのCライブラリを標準で利用しているため、通常、新たな設定なしでiconvが利用できます。
また、iconvは、コマンドラインユーティリティも存在し、nkfに代わり利用することができます。
GNUのiconvは変換に際して、各文字コードを内部コードに変換するgconv モジュール (動的にロードされる共有ライブラリ)を順次呼び出し、所定の文字コード間の変換を行います。
つまり、対象の文字コードの変換を行うgconvモジュールを追加することで、容易に変換対象の文字コードを拡張することができます。
LinuxTVコミュニティとiconv †
LinuxTVコミュニティは、Linuxベースのセットトップボックスや携帯電話などの組み込み機器に向けて、Linuxカーネルメディア・サブシステムやユーザ空間ライブラリ、アプリケーションを開発およびメンテナンスを行っています。
この中で、日本のデジタル放送およびヨーロッパのデジタル放送で使用する文エンコーディングをサポートするgconvモジュールが開発、公開されています。
これらのgconvモジュールをLinuxに組み込むことで以下の文字コードのサポートが追加されます
- ARIB-STD-B24(ARIB-B24) 日本のデジタル放送の文字コード
- EN300-468-TAB00 ヨーロッパのデジタル放送の文字コード
なお、LinuxTVコミュニティが開発した上記のgconvモジュールはLinuxのメインストリームへのマージが提案されましたが、却下されており、各Linuxディストリビューションに包含される予定はありません。
RPMパッケージ †
RHELまたはCentOSにおいて、上記のgconvモジュールを単独でインストール、利用するために以下のRPMを用意しました。
※RHEL5/CentOS5のサポートを終了しました。
※RHEL8/CentOS8のサポートを追加しました。
※原作者の塚田様により、追加文字集合で不正なコードを検出した場合、漢字集合にフォールバックするよう、修正いただきました。
文字コード †
文字コードとして下表の文字セットを使用します。ただし、モザイク集合はサポート対象外とします。また字幕のための制御コード は無視されます。
文字符号集合 | 記事 |
漢字系集合 | ARIB STD-B24 |
JIS 互換漢字 1 面( 2 バイト符号) | JIS X0213:2004 |
JIS 互換漢字 2 面( 2 バイト符号) | JIS X0213:2004 |
英数( 1 バイト符号) | ARIB STD-B24 |
平仮名( 1 バイト符号) | ARIB STD-B24 |
片仮名( 1 バイト符号) | ARIB STD-B24 |
JIS X0201 片仮名 | |
外字符号集合 | ARIB STD-B24 |
マクロ符号集合 | ARIB STD-B24 |
追加記号( 2 バイト符号) | ARIB STD-B24 |
符号化処理概要 †
符号化はARIB8単位文字符号に準じ符号化します。
下図に示す符号体系により符号化を実施します。
固定的に割り振られる制御コードと、GR/GLであらわされる割り当てがエスケープシーケンスにより変更されるコード(1バイトもしくは2バイト文字)により符号化されます。
また、GR/GLにマッピングされるコードは中間バッファ(G0~G3)に一旦マッピングされた後、再度GR/RLにマッピングされる仕組みを有します。
UCS(国際符号化文字集合:Universal multi-octet coded Character Set)コードとARIB8単位コードとの対応については、ARIB STD-B62の
第1編 データ符号化方式
第5章 文字符号化
表5-2 追加する記号・文字
を参照ください。


初期値 †
操作 | 符号面 | 初期値 |
指示 | G0 | JIS互換漢字面 |
G1 | 英数集合 |
G2 | 平仮名集合 |
G3 | 片仮名集合 |
呼び出し | GL | LS0(G0) |
GR | LS2R(G2) |
文字サイズ | | NSZ |
符号の呼び出し †
呼び出し制御 | 呼び出し制御 符号化表現 | 制御の内容 |
符号集合 | 呼び出し先 | 呼び出し形態 |
LS0 | | 0x0F | G0 | GL | ロッキングシフト |
LS1 | | 0x0E | G1 | GL | ロッキングシフト |
LS2 | ESC | 0x6E | G2 | GL | ロッキングシフト |
LS3 | ESC | 0x6F | G3 | GL | ロッキングシフト |
LS1R | ESC | 0x7E | G1 | GR | ロッキングシフト |
LS2R | ESC | 0x7D | G2 | GR | ロッキングシフト |
LS3R | ESC | 0x7C | G3 | GR | ロッキングシフト |
SS2 | | 0x19 | G2 | GL | シングルシフト |
SS3 | | 0x1D | G3 | GL | シングルシフト |
符号の指示制御 †
指示制御の 符号化表現 | 制御の内容 |
文字集合の分類 | 指示先 |
ESC | 0x28 | F | | | 1バイトGセット | G0 |
ESC | 0x29 | F | | | G1 |
ESC | 0x2A | F | | | G2 |
ESC | 0x2B | F | | | G3 |
ESC | 0x24 | F | | | 2バイトGセット | G0 |
ESC | 0x24 | 0x29 | F | | G1 |
ESC | 0x24 | 0x2A | F | | G2 |
ESC | 0x24 | 0x2B | F | | G3 |
ESC | 0x28 | 0x20 | F | | 1バイトDRCS | G0 |
ESC | 0x29 | 0x20 | F | | G1 |
ESC | 0x2A | 0x20 | F | | G2 |
ESC | 0x2B | 0x20 | F | | G3 |
ESC | 0x24 | 0x28 | 0x20 | F | 2バイトDRCS | G0 |
ESC | 0x24 | 0x29 | 0x20 | F | G1 |
ESC | 0x24 | 0x2A | 0x20 | F | G2 |
ESC | 0x24 | 0x2B | 0x20 | F | G3 |
文字符号集合 | F(終端符号) | 文字コード |
漢字 | 0x42 | 2バイト符号 |
英数 | 0x4A | 1バイト符号 |
平仮名 | 0x30 | 1バイト符号 |
片仮名 | 0x31 | 1バイト符号 |
プロポーショナル英数 | 0x36 | 1バイト符号 |
プロポーショナル平仮名 | 0x37 | 1バイト符号 |
プロポーショナル片仮名 | 0x38 | 1バイト符号 |
JIS X0201 片仮名 | 0x49 | 1バイト符号 |
JIS 互換漢字 1面 | 0x39 | 2バイト符号 |
JIS 互換漢字 2面 | 0x3A | 2バイト符号 |
追加記号 | 0x3B | 2バイト符号 |
文字符号集合 | F(終端符号) | 文字コード |
DRCS-0 | 0x40 | 2バイト符号 |
DRCS-1 | 0x41 | 1バイト符号 |
DRCS-2 | 0x42 | 1バイト符号 |
DRCS-3 | 0x43 | 1バイト符号 |
DRCS-4 | 0x44 | 1バイト符号 |
DRCS-5 | 0x45 | 1バイト符号 |
DRCS-6 | 0x46 | 1バイト符号 |
DRCS-7 | 0x47 | 1バイト符号 |
DRCS-8 | 0x48 | 1バイト符号 |
DRCS-9 | 0x49 | 1バイト符号 |
DRCS-10 | 0x4A | 1バイト符号 |
DRCS-11 | 0x4B | 1バイト符号 |
DRCS-12 | 0x4C | 1バイト符号 |
DRCS-13 | 0x4D | 1バイト符号 |
DRCS-14 | 0x4E | 1バイト符号 |
DRCS-15 | 0x4F | 1バイト符号 |
マクロ | 0x70 | 1バイト符号 |
文字符号集合 †
漢字集合 †








英数集合・片仮名集合・平仮名集合 †



JIS X0201 片仮名集合 †

追加記号 †


















gconv-digital-tv固有の符号化 †
gconv-digital-tvでは、以下の固有の符号化を実施しています。
エンコード動作において、以下の動作を行います。
・GL符号領域は、G0/G1集合のみ指定します。
・GR符号領域は、G2/G3集合のみ指定します。
・G0集合は漢字系集合に固定指定します。
・G1集合はASCII(1バイトGセット)に固定指定します。
・G2集合は平仮名集合およびJIS 互換漢字1/2面に使用します。
・G3集合は片仮名集合、JIS X0201 片仮名集合および追加記号に使用します。
・G2集合にJIS 互換漢字1/2面を指示する場合およびG3集合に追加記号を指示する場合は、シングルシフトにより指示します。
UTF-8(UCSコード)を入力とした場合の制限 †
Restricted領域 †
入力文字コードをUCSコード(UTF-8)として場合、UCSでは未定義の文字や、Restricted領域(外字等を含む限定使用領域)は正しく変換されません。
Restricted領域の文字はRestricted領域以外の文字に変換しておく必要があります。
例1) ×(事故) U+E0C9(変換不可) → U+26CC(変換可能)
例2) P(駐車場) U+E0DB(変換不可) → U+1F17F*1(変換可能)
UCS未定義文字 †
追加記号において、一部の文字(「氏」「副」「元」等のサイズの小さい文字や、楽器の記号等)については、類似の文字があり、
そのサイズを指定することで代替可能との理由でUCS符号には含まれていません。
そのため、あらかじめこれらの文字は類似文字に変換しておく必要があります。
例1) 氏 U+E290 → (該当なし)
例2) (vn) U+E2A5 → (該当なし)