こんにちは!kossyです!
さて、今回はプログラミングにおけるテキストデータ取り扱い時の用語であるUCSとCSIについて、
ブログに残してみたいと思います。
UCS方式
UCSはUniversal Character Setの略で、日本語にすると汎用文字集合という意味になります。
入出力時にプログラミング言語がテキストデータをUCSに変換し、内部ではテキストデータを統一的に扱う方式です。
利点
- 仕組みがシンプルで実装が容易であ
- 変換以外は処理コストが低い
- 利用実績が多い
欠点
- 不要な変換が発生することがある
- 変換に曖昧な部分が残る
- 外字・機種依存文字などの問題がある
- UCSに含まれない文字は絶対に扱えない
CSI方式
CSIはCharacter Set Independentの略で、文字集合独立と訳すことができます。
各種文字集合と符号化方式を変換せずにそのまま扱う方式で、UCS方式が内部的には1種類の文字符号化方式を処理するのに対して、CSI方式は各種符号化方式をそのまま扱います。
CSI方式は複数の符号化方式を扱えるため、UCS方式のスーパーセット(上位集合)になります。
ちなみに、RubyはCSI方式を採用している言語で、非常に稀有な存在になっています。
Rubyの作者のまつもとゆきひろさんは、主要な言語でUCS方式が採用され、
CSI方式があまり採用されない現状に、
「将来ロストテクノロジーになってしまいそう」と残念がっておられました。
RubyではなぜUCS正規化を採用していないのでしょうか? - Quora
利点
- 無駄な変換が発生しない
- 変換に由来する問題が発生しない
- 外字などの問題が発生しにくい(発生しないように対処可能)
- 原理的に扱えない文字がない
- 必要に応じてアプリケーション独自の文字集合を扱うことも可能