文字コードまめ知識

来源:互联网 发布:网络销售计划书 编辑:程序博客网 时间:2024/06/16 22:45

 

       目次    【1】ISO-2022 エスケープシーケンス【2】US-ASCII コード表【3】JISX0201 コード表【4】JISX0211 C0,C1 制御文字集合表【5】SJIS ←→ JIS 変換【6】UTF-9【7】用語解説【8】参考文献    

 

 

 

 

 △

 

  ISO-2022 エスケープシーケンス 

 

 

  

 

表 1 : エスケープシーケンス表
シーケンス意味0x0FSIGL <- G00x0ESOGL <- G10x1B 0x6EESC nGL <- G20x1B 0x6FESC oGL <- G3不可GR <- G00x1B 0x22ESC "GR <- G10x1B 0x7DESC }GR <- G20x1B 0x7CESC |GR <- G3 0x1B 0x4EESC N (SS2)GL <- G2 (一文字のみ)0x1B 0x4FESC O (SS2)GL <- G3 (一文字のみ)0x8ESS2GR <- G2 (一文字のみ)0x8FSS3GR <- G3 (一文字のみ) 0x1B 0x28 [F]ESC ( [F]G0 <- 1バイト94領域文字0x1B 0x24 0x28 [F]ESC $ ( [F]G0 <- 多バイト94領域文字不可G0 <- 1バイト96領域文字不可G0 <- 多バイト96領域文字 ここで [F] が 0x40-0x42 なら ( を省略0x1B 0x29 [F]ESC ) [F]G1 <- 1バイト94領域文字0x1B 0x24 0x29 [F]ESC $ ) [F]G1 <- 多バイト94領域文字0x1B 0x2D [F]ESC - [F]G1 <- 1バイト96領域文字0x1B 0x24 0x2D [F]ESC $ - [F]G1 <- 多バイト96領域文字 0x1B 0x2A [F]ESC * [F]G2 <- 1バイト94領域文字0x1B 0x24 0x2A [F]ESC $ * [F]G2 <- 多バイト94領域文字0x1B 0x2E [F]ESC . [F]G2 <- 1バイト96領域文字0x1B 0x24 0x2E [F]ESC $ . [F]G2 <- 多バイト96領域文字 0x1B 0x2B [F]ESC + [F]G3 <- 1バイト94領域文字0x1B 0x24 0x2B [F]ESC $ + [F]G3 <- 多バイト94領域文字0x1B 0x2F [F]ESC / [F]G3 <- 1バイト96領域文字0x1B 0x24 0x2F [F]ESC $ / [F]G3 <- 多バイト96領域文字

 

 

  

 

表 2 : 文字コード別 [F] の定義
1バイト系94領域[F]ISO-646 英国版AISO-646 ( US-ASCII )BJISX0201カナIJISX0201ラテンJ
多バイト系94領域[F]JISX0208-1978@GB 2312-80 (簡体字)AJISX0208-1983(1990,1997も)BKS C 5601-1987 (Hangle)CJISX0212-1990 (拡張漢字)DCNS 11643-1986-1 ~ 7 (繁体字)G~M
1バイト系96領域[F]ISO-8859-1AISO-8859-2BISO-8859-3CISO-8859-4DISO-8859-5LISO-8859-6GISO-8859-7FISO-8859-8HISO-8859-9MISO-8859-10X

 

 

  
 
 
 
 △

 

  US-ASCII コード表 

 

 

  

 

表 : US-ASCII コード表

 

 

  

 

ISO-646 は 0x21-0x7E の部分だけをいいます。 表中の灰色部分は各国版 ISO-646 で別の文字への入れ替えが許されている領域です。 日本版である JISX0201ラテンでは 0x5C(バックスラッシュ) が 円記号、0x7E(チルダ) がオーバーラインに置き換わっています。 ( 下の表を参照 )

 

 

  
 
 
 
 △

 

  JISX0201 コード表 

 

 

  

 

表 : JISX0201 コード表
ラテンカナ

 

 

  
 
 
 
 △

 

  JISX0211 C0,C1 制御文字集合表 

 

 

  

 

表 : C0 集合
番号意味番号意味0x00NULNULL0x10DLEDATA LINK ESCAPE0x01SOHSTART OF HEADING0x11DC1DEVICE CONTROL ONE0x02STXSTART OF TEXT0x12DC2DEVICE CONTROL TWO0x03ETXEND OF TEXT0x13DC3DEVICE CONTROL THREE0x04EOTEND OF TRANSMISSION0x14DC4DEVICE CONTROL FOUR0x05ENQENQUIRY0x15NAKNEGATIVE ACKNOWLEDGE0x06ACKACKNOWLEDGE0x16SYNSYNCHRONOUS IDLE0x07BELBELL0x17ETBEND OF TRANSMISSION BLOCK0x08BSBACKSPACE0x18CANCANCEL0x09HTHORIZONTAL TABULATION0x19EMEND OF MEDIUM0x0ALFLINE FEED0x1ASUBSUBSTITUTE0x0BVTVERTICAL TABULATION0x1BESCESCAPE0x0CFFFORM FEED0x1CFSFILE SEPARATOR0x0DCRCARRIAGE RETURN0x1DGSGROUP SEPARATOR0x0ESOSHIFT OUT0x1ERSRECORD SEPARATOR0x0FSISHIFT IN0x1FUSUNIT SEPARATOR

 

 

  

 

表 : C1 集合
番号意味番号意味0x80  0x90DCSDEVICE CONTROL STRING0x81  0x91PU1PRIVATE USE ONE0x82BPHBREAK PERMITTED HERE0x92PU2PRIVATE USE TWO0x83NBHNO BREAK HERE0x93STSSET TRANSMIT STATE0x84  0x94CCHCANCEL CHARACTER0x85NELNEXT LINE0x95MWMESSAGE WAITING0x86SSASTART OF SELECTED AREA0x96SPASTART OF SELECTED AREA0x87ESAEND OF SELECTED AREA0x97ESPEND OF GUARDED AREA0x88HTSCHARACTER TABULATION SET0x98SOSSTART OF STRING0x89HTJCHARACTER TABULATION WITH JUSTIFICATION0x99  0x8AVTSLINE TABULATION SET0x9ASCISINGLE CHARACTER INTRODUCER0x8BPLDPARTIAL LINE FORWARD0x9BCSICONTROL SEUENCE INTRODUCER0x8CPLUPARTIAL LINE BACKWARD0x9CSTSTRING TERMINATOR0x8DRIREVERSE LINE FEED0x9DOSCOPERATING SYSTEM COMMAND0x8ESS2SINGLE SHIFT TWO0x9EPMPRIVACY MESSAGE0x8FSS3SINGLE SHIFT THREE0x9FAPCAPPLICATION PROGRAM COMMAND

 

 

  
 
 
 
 △

 

  SJIS ←→ JIS 変換 

 

 

  

 

 ■ JISX0208 → SJIS
  1. コードから 0x2121 を引く
  2. (コード & 0x100) が0でなければ コードに 0x9E, 0ならばコードに 0x40 を足す
  3. 下位バイトが 0x7F 以上ならば コードに 1 を足す
  4. [上位バイトだけの処理] 上位バイトを右に1ビット シフトし、それに 0x81 を足す
  5. (0xA000 <= コード) ならばコードに 0x4000 を足す

 

 

  

 

 ■ SJIS → JISX0208
  1. (0xE000 <= コード) ならばコードから 0x4000 を引く
  2. [上位バイトのみ] 上位バイトから 0x81 を引き 1ビット左にシフトする
  3. 下位バイトが 0x80 以上ならコードから1を引く
  4. 下位バイトが 0x9E 以上ならコードに 0x100 を足し、 コードから 0x9E を引く。 そうでなければコードから0x40 を引く
  5. コードに 0x2121 を足す。

 

 

  

 

「コードに 0x100 を足し、コードから 0x9E を引く」 というのはつまり、
「上位バイトに1を足し,下位バイトから 0x9E を引く」 であり、
「コード全体に 0x62 を足す」ことでもあります。

 

 

  
 
 
 
 △

 

  UTF-9 

 

 

  

 

UTF-8 を改造した、ISO-8859-1 ( Latin-1 ) 向けのエンコーディングです。 UTF-8 同様辞書順が保存されます。 文字の先頭バイトがわかりません。 標準として採用されなかった模様です。 ここでは参考までにアルゴリズムを説明します。

 

 

  

 

u1-u7はそれぞれ8ビット値です。
  1. 0x00-0xFF (1Byte)
    1. u1 = ucode;
    2. u1 を出力
     
  2. 0x0100-0x7FF (2Byte) 
    1. u1 = ((ucode >> 7) & 0x0F) | 0x80; 
    2. u2 = (ucode & 0x7F) | 0x80; 
    3. u1,u2 の順に出力
     
  3. 0x0800-0xFFFF (3Byte) 
    1. u1 = ((ucode >> 14) & 0x03) | 0x90; 
    2. u2 = ((ucode >> 7) & 0x7F) | 0x80; 
    3. u3 = (ucode & 0x7F) | 0x80; 
    4. u1,u2,u3 の順に出力
     
  4. 0x00010000-0x007FFFFF (4Byte) 
    1. u1 = ((ucode >> 21) & 0x03) | 0x94; 
    2. u2 = ((ucode >> 14) & 0x7F) | 0x80; 
    3. u3 = ((ucode >> 7) & 0x7F) | 0x80; 
    4. u4 = (ucode & 0x7F) | 0x80; 
    5. u1,u2,u3,u4 の順に出力
     
  5. 0x00800000-0x7FFFFFFF (5Byte) 
    1. u1 = ((ucode >> 28) & 0x07) | 0x98; 
    2. u2 = ((ucode >> 21) & 0x7F) | 0x80; 
    3. u3 = ((ucode >> 14) & 0x7F) | 0x80; 
    4. u4 = ((ucode >> 7) & 0x7F) | 0x80; 
    5. u5 = (ucode & 0x7F) | 0x80; 
    6. u1,u2,u3,u4,u5 の順に出力
     

 

 

  
 
 
 
 △

 

  用語解説 

 

 

  

 

用語意味文字集合,文字セット : Charcter Set / charset (狭義)単なる文字の集合.文字に対して番号を振っていない状態.Charcter Encoding Method文字集合(狭義) から数値への変換方法の定義. 方法を定義するもので文字集合とは独立のもの.符号化文字集合 : Coded Character Set,Codeset , CCS文字集合(狭義) + Chaacter Encoding Method.
文字集合 <-> 数値のマッピング.数値はあくまでも数値で あって,バイト列とは関係ない. 通常 CCS は文字コード表になっていて,16進表記されており, CES に直結している場合が多い.Character Encoding Scheme , CESCES は "バイト列" <-> "1つ以上の CCS" のマッピングを あらわす.
たとえば ISO-2022-JP ( の CES )は ASCII,JISX0201(ラテン), JISX0208 の3つの CCS とバイト列のマッピングを定義する ものである.文字集合,文字セット : Charcter Set / charset (広義)CCSes ( 1つ以上の CCS ) + CES.
バイト列を文字列に変換する方法およびその逆. 一般にいう ISO-2022-JP は, ASCII, JISX0201(ラテン), JISX0208 の3つの CCS と ISO-2022-JP の CES から 構成されるものを指す.

 

 

  
 
 
 
 △

 

  参考文献/参考サイト 

 

 

  

 

[1]JIS ハンドブック 情報処理 用語 符号 データコード編-1999 , 1999, 財団法人 日本規格協会[2]日本工業規格 国際符号化文字集合(UCS) 第1部 体系及び基本多言語面,1995 , 財団法人 日本規格協会[3]UTF-7 A Mail-Safe Transformation Format of Unicode, RFC-2152 , D. Goldsmith, M. Davis , 1997[4]UTF-8, a transformation format of ISO 10646, RFC-2279 , F. Yergeau , 1998[5]Charsets Table, http://shika.aist-nara.ac.jp/member/nori-d/inet/i18n/charset-tab.html[6]文字コード, http://dennou-t.ms.u-tokyo.ac.jp/arch/zz1998/mozi/zengaku.html[7]ISO 2022 で定められた情報用符号拡張のエスケープシーケンス一覧, http://www.tomo.gr.jp/wnn/furoku.html[8]JISX0213 公開レビュー, http://jcs.aa.tufs.ac.jp/jcs/pubrev/index.html[9]Unicode Home Page, http://www.unicode.org/[10]fj.kanji の各記事

 

 

  

 

原创粉丝点击