Shift_JIS
[Wikipedia|▼Menu]
これは当時のアプリケーションソフト(Multiplanなど)でメニュー選択にスペースキーを使用していたためであった。また、プリンターでは全角スペースと半角スペースの幅の比が2対1でない場合があるため、スペースの区別は帳票設計に影響があった[7]
標準化

Shift_JISは ISO 2022の符号化の範囲外にあるベンダー独自の実装として誕生しており、普及後もしばらく標準化されずにいたが、JIS X 0208:1997において附属書1で「シフト符号化表現」という名前で仕様が定義された。また、IANAにおいても「Shift_JIS」の名称が登録されている[8]

JIS X 0208の拡張規格であるJIS X 0213では、2000年制定時に附属書1で上位互換仕様のShift_JISX0213が定められ、2004年改定時にShift_JIS-2004と名称が変更された。

その後は更新は停止したが、日本語版Windowsが長らく標準をShift_JISに定めていたことで使用され続けた。不都合が多いためUnicodeへの移行が呼びかけられている[9]
符号化方式
区点番号の割当

JIS X 0208では文字集合が区点番号として94×94の文字表の行と列の番号の組で表現される。これら区点番号をShift_JISでは以下のような対応で符号化している。

表: 区点(第1面)とShift_JIS符号化Shift_JIS第2バイト(16進)
40…7E80…9F…FC
第1バイト
(16進)811区1点1区63点1区64点2区1点2区94点
?
9F61区1点61区63点61区64点62区1点62区94点
E063区1点63区63点63区64点64区1点64区94点
?
EF93区1点93区63点93区64点94区1点94区94点

JIS X 0213では94×94の文字表が2つあり、それぞれ第1面・第2面と表現される。第1面(第1・2・3水準)は上記符号化の範囲に収まる。第2面(第4水準)は区番号が1・3・4・5・8・12-15・78-94区と不連続に構成されており、この26区分を収録するためにShift_JIS-2004では以下のように対応している。

表: 区点(第2面)とShift_JIS符号化Shift_JIS第2バイト(16進)
40…7E80…9F…FC
第1バイト
(16進)F01区1点1区63点1区64点8区1点8区94点
F13区1点3区63点3区64点4区1点4区94点
F25区1点5区63点5区64点12区1点12区94点
F313区1点13区63点13区64点14区1点14区94点
F415区1点15区63点15区64点78区1点78区94点
F579区1点79区63点79区64点80区1点80区94点
?
FC93区1点93区63点93区64点94区1点94区94点

区点番号からの変換

面区点番号 m , k , t {\displaystyle m,k,t} から Shift_JISの 第1バイト s 1 {\displaystyle s_{1}} ・第2バイト s 2 {\displaystyle s_{2}} は以下の式で求められる[10]。 ⌊ x ⌋ {\displaystyle \lfloor x\rfloor } は床関数。 s 1 = { ⌊ k + 257 2 ⌋ if  m = 1  and  1 ≤ k ≤ 62 ⌊ k + 385 2 ⌋ if  m = 1  and  63 ≤ k ≤ 94 ⌊ k + 479 2 ⌋ − ⌊ k 8 ⌋ × 3 if  m = 2  and  k = 1 , 3 , 4 , 5 , 8 , 12 , 13 , 14 , 15 ⌊ k + 411 2 ⌋ if  m = 2  and  78 ≤ k ≤ 94 {\displaystyle s_{1}={\begin{cases}\left\lfloor {\frac {k+257}{2}}\right\rfloor &{\mbox{if }}m=1{\mbox{ and }}1\leq k\leq 62\\\left\lfloor {\frac {k+385}{2}}\right\rfloor &{\mbox{if }}m=1{\mbox{ and }}63\leq k\leq 94\\\left\lfloor {\frac {k+479}{2}}\right\rfloor -\left\lfloor {\frac {k}{8}}\right\rfloor \times 3&{\mbox{if }}m=2{\mbox{ and }}k=1,3,4,5,8,12,13,14,15\\\left\lfloor {\frac {k+411}{2}}\right\rfloor &{\mbox{if }}m=2{\mbox{ and }}78\leq k\leq 94\end{cases}}} s 2 = { t + 63 if  k  is odd and  1 ≤ t ≤ 63 t + 64 if  k  is odd and  64 ≤ t ≤ 94 t + 158 if  k  is even  {\displaystyle s_{2}={\begin{cases}t+63&{\mbox{if }}k{\mbox{ is odd and }}1\leq t\leq 63\\t+64&{\mbox{if }}k{\mbox{ is odd and }}64\leq t\leq 94\\t+158&{\mbox{if }}k{\mbox{ is even }}\end{cases}}}
符号化可能な文字数

初期のShift_JISでは、第1バイトが47通り、第2バイトが188通りの符号があるため、 47 × 188 = 94 × 94 = 8836 の2バイト文字を表現することができ、これはJIS X 0208で規定された区点番号のすべてを収められるように設計されている。ここに158字の英数字・半角カナ(スペース含む、DEL除く)を加えると、計 8994 文字となる。

さらに、第1バイトはF016-FC16を用いることで60通りまで拡張されており、 60 × 188 + 158 = 11438 文字を表現することができる。Microsoftコードページ932IBM拡張文字やShift_JIS-2004の第4水準文字の符号化ではこれらの領域を動員している。
特徴
利点

全角文字と、JIS X 0201で定義したいわゆる半角カナ文字を同一のコード体系で表現できる。

日本語環境においては、MS-DOSで日本語用文字コードとして採用されて以来、パソコンにおいて圧倒的な普及度があり、その他の文字符号化方式に比べてデータ交換可能性が高い。

UTF-8などに比べてサイズが小さい。UTF-8では半角カナや漢字の多くは3バイトを要する。

欠点

半角カナのための領域を確保した関係上、区点番号と符号の相互演算には前述のように煩雑な条件分岐が必要である。

2バイト目に8016未満(ASCIIのコード領域)が現れる。このため、文字の区切りの判定に手間がかかる。ファイルや電文の先頭から文字コードの判定をする場合はよいが、後ろから判定をしようとすると、最悪の場合、先頭までたどらないといけないことがあるため、プログラムの作り方に工夫が必要になる。また、この領域に含まれる一部の文字の扱いのため、マルチバイトのEUC-JP、UTF-8などに比べ、プログラミング上の扱いが難しい(次項を参照)。

JIS補助漢字が表現できない。

文字集合については実装ベンダがJIS X 0208で規定されていない機種依存の拡張を施していることが多く、こういった拡張部分に関してはデータ交換可能性が低い。特に広く普及しているMicrosoftコードページ932JIS X 0213で拡張されたShift_JIS-2004と併用できない。

2バイト目が5C等になりうることによる問題

表: JIS X 0208で2バイト目に5C16を持つ文字一覧文字符号
(16進)読み・字義文字化け例
―815Cダッシュ
ソ835C (片仮名)ソフト→ャtト
Ы845Cゥイ (キリル文字)
噂895Cソン、うわさ噂話→汚b
浬8A5Cリ、かいりノット
欺8B5Cギ、あざむ-く詐欺師→詐去t
圭8C5Cケイ錦織圭など→錦織撃ネど
構8D5Cコウ、かま-える構成→告ャ
蚕8E5Cサン、かいこ養蚕業→養視ニ
十8F5Cジュウ、とお (漢数字の10)十人十色→署l署F
申905Cシン、もう-す、さる申請→瑞ソ、 申込み→錐桙ン


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:53 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef