インクジェットプリンターのKGK紀州技研工業 
『より詳しい文字コードの話』

シフトJISコード

シフトJISコードはパソコンの日本語コードとして普及しています。
文字どおりJISコード(JIS X208)を 1バイトコード(JIS X201)に重ならないようにシフトしたものです。
まず、JISコードの第一バイトをJIS X201で使われていない領域にシフトします。(0x80~0x9F、0xE0~0xFF)
つぎに第二バイトも0x40~0xFCにシフトします。(0x7Fは避けてシフトします。)
シフトの計算は以下のようになっています。

第一バイト
区分 JISコード(A) 計算式 シフトJISコード
全区 0x21~0x5E (A+1)/2+0x70 0x81~0x9F
0x5F~0x7E (A+1)/2+0xB0 0xE0~0xEF
第二バイト
区分 JISコード(B) 計算式 シフトJISコード
奇数区 0x21~0x5F B+0x1F 0x40~0x7E
0x60~0x7E B+0x20 0x80~0x9E
偶数区 0x21~0x7E B+0x7E 0x9F~0xFC

第一バイト


ASCII領域とJISコードの第一バイトが重なるため、ASCII、半角カナのいずれとも重ならない 0x80~0x9F、0xE0~0xEFに第一バイトを移動させます。
「JIS領域1」のコードは「シフトJIS領域1」へ、「JIS領域2」のコードは「シフトJIS領域2」へ、 それぞれ移動します。

  0 1 2 3 4 5 6 7 8 9 A B C D E F
0 ASCII
領域
     


JIS


1






JIS


2


1 JIS


1
JIS


2
2
3
4
5
6
7
8
9
A
B
C
D
E
F        

第二バイト


隣り合う奇数区と偶数区が同じ第一バイトを共有するため、第二バイトは 94×2=188の領域を使用します。
制御コードの領域を避けるため、0x40~0x7E、0x80~0xFCにシフトします。(奇数区は0x40~0x7E,0x80~0x9E、偶数区は0x9F~0xFC)
ASCIIと重複するコードを含むため、処理には注意する必要があります。

  0 1 2 3 4 5 6 7 8 9 A B C D E F
0 ASCII領域 奇数区       偶数区  
1
2
3
4
5
6
7
8
9
A
B
C
D  
E  
F        

 このコードの特徴は以下のとおりです。

  • ASCIIや半角カナを含むJIS X201と共存できる。
  • コード切り換えのためのエスケープシーケンスが必要でない。
  • 0x80~0x9F、0xE0~0xEFのコードは2バイト文字の第一バイトなので、次のバイトとあわせて 1文字として処理する。
  • 第二バイトは他のコードと重複するため、注意が必要。