JIS X 0208

概要

日本語表記のための漢字・図形の符号化文字集合(の規格)。7ビット及び8ビットの2バイトで表現。「7ビット及び8ビットの2バイト情報交換用符号化漢字集合」(7-bit and 8-bit double byte coded KANJI sets for information interchange)。

図形文字は94×94=8834の区点に非漢字524字、第一水準漢字2965字、第二水準漢字3390字の6879字が定義されている。

コード表

構造

JIS X 0208は区(row)と点(cell)の交点に文字を定義する。各区に対して80の点が定義され、1つの文字は「区/点」で表される(コードポイント)。

たとえば1区のコード表は以下のとおり。

+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
1 0 ´ ¨
16 _
32
48 ± ×
64 ÷ °
80 §

 

割当て

1区~8区 記号・英数・かな
16区~47区 第1水準漢字
48区~84区 第2水準漢字

1区~8区の内訳は以下のようになっている。

1~2区 記号
3区 数字、アルファベット
4区 平仮名
5区 片仮名
6区 ギリシャ文字
7区 ロシア文字
8区 罫線文字

JIS X 0208の一部を例示すると以下のとおり。「あ」は4区2点、「愛」は16区6点となる。

区\点 1 2 3 4 5 6 7 8 9 10
2/1 2/2 2/3 2/4 2/5 2/6 2/7 2/8 2/9 2/A
1 2/1
2 2/2
3 2/3
4 2/4
5 2/5
6 2/6 Α Β Γ Δ Ε Ζ Η Θ Ι Κ
7 2/7 А Б В Г Д Е Ё Ж З И
8 2/8
9 2/9
: : : : : : : : : : : :
15 2/F
16 3/0
17 3/1
18 3/2
: : : : : : : : : : : :

参考~JIS X 0208の文字コード

区点の仕組み

区/点と列/行

JIS-X0208は2バイトで文字を表現する。2バイトのうち1バイトを「区」(row)とし、第2バイトを「点」(cell)とする。

1バイトを上位ビットと下位ビットに分け、上位ビットを「列」、下位ビットを「行」とする。

1バイトが7ビットの場合、000|0000~111|1111の128パターンが表現可能だが、このうち34パターンが1バイト文字として先取りされる。このため、区及び点を表現できる1バイトのパターン数は94となる。

列/行

2バイト文字の1バイトのパターンの表現方法。1バイトを上位3 or 4ビット(列)と下位4ビット(行)に分け、それぞれの10進数表記を'/'で区切って「列番号/行番号」とする。たとえば7ビットの場合、011|1011は3/11(3列11行)となる。

1バイトが7ビットの場合、000|0000~111|1111すなわち0/0~7/15で、その数8×16=128が全体のパターン数となる。但し後述のように、このうち34パターンが1バイト文字に先取りされるため、2バイト文字として使用可能なのは128−34→94パターンとなる。

1バイト文字

1バイト文字には以下の34文字(制御文字とSPACE)が予約される。

制御文字

0列(0/0~0/15)と1列(1/0~1/15)の32個の領域には制御文字を配置する(CL領域)。

SPACE

2/0にはSPACE(空白)を配置する。

DELETE

7/15にはDELETE(抹消)を配置する。

7ビット2バイトの場合

上位7ビットを区、下位8ビットの1バイトを点とする。

  • CL領域(0/0~1/15)の制御文字
  • 2/0のSPACE
  • 7/15のDELETE
  • GL領域(2/1~7/14)の図形文字
    →2バイトで94×94区点

8ビット2バイトの場合

8ビット2バイトの場合、7ビット2バイトに対して、1バイト目の最上位ビットが加わる。

最上位ビットが0の場合、7ビット2バイトと同じで、区や点のパターンは0/0~7/15の128パターン。

  • CL領域(0/0~1/15)の制御文字
  • 2/0のSPACE
  • 7/15のDELETE
  • GL領域(2/1~7/14)の図形文字
    →2バイトで94×94区点

一方、1バイト目の最上位ビットが1の場合は、区や点のパターン数は8/0~15/15でパターンを以下のように割り当てる。

  • CR領域(8/0~9/15)の制御文字
  • 10/0、10/15は不使用
  • GR領域(10/1~15/14)の図形文字
    →2バイトで94×94区点

GR領域の考え方はGL領域と同じで、94×94の区点で8836個の文字を配置可能。

 

 

 

JIS X 0201

概要

7ビット及び8ビットの情報交換用符号化文字集合。ラテン文字用図形文字集合と片仮名用図形文字集合のふたつの文字集合からなっている。半角英数、半角カナ。俗称ANKコード (Alphabet Numeric Katakana) 。

このJIS X 0201はJIS X 0208と併せてShift_JISやEUC-JPで用いられる。JIS X 0201の殆どの文字はJIS X 0208の一部と重複するので、半角で表示されることが多い。

文字集合

ラテン文字用図形文字集合

8ビットの場合、0010|0001~0111|1110(0x21~0x7E)の94文字に図形文字を割り当てている。先頭ビットが0で、7ビットでそれ以降のパターンは変わらない。

ASCIIとほぼ同じ並びだが、以下の2つの文字の表現がASCIIと異なる。

  • 5C:\¥
  • 7E:~→ ¯
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
20 ! # $ % & ( ) * * , . /
30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
40 @ A B C D E F G H I J K L M N O
50 P Q R S T U V W X Y Z [ ¥ ] ^ _
60 ` a b c d e f g h i j k l m n o
70 p q r s t u v w x y z { | } ¯

 

片仮名用図形文字集合

8ビットの1010|0001~1111|1110(0xA1~0xFE)の94文字に図形文字を割り当てている。7ビットの場合は先頭ビットの1を無視する。

半角カタカナや記号として表示される。

+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
A0
B0
C0
D0
E0
F0

 

7ビット/8ビット

8ビットの場合は、0x21~0x7Eにラテン文字、0xA1~0xFEに片仮名文字を割り当てる。

7ビットの場合は、SIHT-OUT  (SO, 0x0E)、SHIFT-OUT (SO, 0x0F)でラテン文字とカタカナ文字を切り替える。SO以降は片仮名、SI以降はラテン文字となる。

 

EBCDIC

概要

EBCDIC ( Extended Binary Coded Decimal Interchange Code)は、IBMにより定義された8ビットの文字コード。

BCDの0~9 (0000~1001)を8ビットに拡張し、上位ビットをF (1111)として10進の数値を充てており、アルファベット文字や記号をそれぞれ特定の位置に定義している。

制御文字

EBCDICの制御文字は16進で00~3FとFFに割り当てられている。

FF:EO

00 01 02 03
0 NUL DLE DS (予約)
1 SOH DC1 SOS (予約)
2 STX DC2 FS SYN
3 ETX DC3 WUS IR
4 SEL RES/EMP BYP/IMP PP
5 HT NL LF TRN
6 RNL BS ETB NBS
7 DEL POC ESC EOT
8 GE CAN SA SBS
9 SPS EM SFE IT
A RPT UBS SM/SW RFF
B VT CU1 CSP CU3
C FF IFS MFA DC4
D CR IGS ENQ NAK
E SQ/LS1 IRS ACK (予約)
F SI/LS0 IUS/ITB BEL SUB

図形文字

共通配置

EBCDICの各コードページに共通する配置は以下のとおりで、文字が定義されていない空白位置には、各コードページごとに制御文字や他の印字可能文字が割り当てられる。

 

40 50 60 70 80 90 A0 B0 C0 D0 E0 F0
0 SP & 0
1 / A J 1
2 B K S 2
3 C L T 3
4 D M U 4
5 E N V 5
6 F O W 6
7 G P X 7
8 H Q Y 8
9 I R Z 9
A :
B . , #
C < * % @
D ( ) _
E + ; > =
F ?

カナ拡張

IBMによるカナ拡張の例。

40 50 60 70 80 90 A0 B0 C0 D0 E0 F0
0 SP & 0
1 / a j A J 1
2 b k s B K S 2
3 c l t C L T 3
4 d m u D M U 4
5 e n v E N V 5
6 f o w F O W 6
7 g p x G P X 7
8 h q y H Q Y 8
9 i r z I R Z 9
A :
B . , #
C < * % @
D ( ) _
E + ; > =
F ?

 

 

Atom – 覚え書き

エディター

スタイルの編集

  • File→Settings→Themes
  • 冒頭”your stylesheet”をクリック
  • styles.lessの内容を編集

コメントの色

styles.lessの以下の部分を編集(colorの値はテーマによる)。

その他

VagrantにSFTP接続

 

Python3 – cURL

基本形~GET

Python3で指定したURLのサイトからレスポンスを得る手順は以下のとおり。

  1. urllib.request.urlopenで接続のオブジェクトを得る
  2. 接続オブジェクトに対してreadメソッドを実行する

ただし結果はバイト列で得られる。

urlopenの引数にURLを指定

以下はurlopenの引数にURLを指定した手順。

  1. urlopenの戻り値(Responseオブジェクト)を変数responseに保存
  2. responsereadメソッドメソッドでレスポンスの内容を取得

レスポンスの内容はバイト列で返される。

文字列でレスポンスを得るには、decodeメソッドでバイト列を文字列にデコードする。

urlopenの引数にRequestオブジェクトを指定

まずURLを指定してurllib.request.Requestオブジェクトを生成し、これをurlopenの引数として接続を開く。

POST

ポストの流れは以下のとおり。

  • urllib.requesturllib.parseをインポートする
  • urlopenの引数にRequestオブジェクトを渡す
  • Requestオブジェクト生成時にdata引数を指定するとPOSTメソッドになる(method='POST'がなくてもよい)
  • dataへ渡す引数は、以下のように処理
    • 元のパラメータ群を辞書で準備
    • そのデータをurllib.parse.urlencodeでエンコード(utf-8のエンコードも加える)

以下はhttpbin.orgを利用して確認した例。httpbin.org/postからのレスポンスがJSON形式なので、jsonライブラリーをインポートしてレスポンスを整形している。

 

Python3 – json

概要

JSONの文字列が与えられたときの扱い。

  1. json.loadsで文字列をPythonの変数に変換(デコード)
  2. json.dumpsでPythonの変数を文字列に変換(エンコード)
    • ensure_ascii=Falseでユニコード文字をエスケープさせない
    • indent=nでJSONの構造に即した改行・インデントを適用

json.loads

json.loadsメソッドは、JSON文字列をPythonの変数にデコードする。Pythonの辞書になっていることがわかる。

JSONのキーと値が辞書のキーと値に対応している。

json.dumps

そのままエンコードした場合

json.dumpsは、辞書に変換されたJSONの内容を文字列にエンコードする。

ただしこのとき、ユニコードはエスケープされ、改行を含まない文字列となる。

引数設定によるJSONの構造表現

以下の2つの引数を指定する。

ensure_ascii=False
ユニコードをエスケープせずそのままの表現とする。
indent=n
JSONの構造に即した改行・インデントを適用する。

これによって、ユニコード文字列はエスケープされず、JSONの構造に即した改行・インデントが適用された文字列が得られる。

 

 

PHP – json

概要

JSONの文字列が与えられたときの扱い。

  1. json_decodeで文字列をPHPの変数に変換
  2. json_encodeでPHPの変数を文字列に変換
    • このとき、JSON_UNESCAPED_UNICODEJSON_PRETTY_PRINTのフラグを立てる

json_decode

json_decode関数は、引数で与えられたJSON文字列をPHPの変数に変換する。

JSONのキーや単体の要素はstringに、{ ... }stdClassのオブジェクトに変換され、キー=>値がオブジェクトのプロパティーとなっている。

json_encode

そのままエンコードした場合

json_encodeは、PHPの変数で表現されたJSONコードを文字列に変換する。

ただしこのとき、ユニコードはエスケープされ、改行を含まない文字列となる。

オプションフラグの設定

以下の2つのフラグをセットする。

JSON_UNESCAPED_UNICODE
ユニコード文字をエスケープせずに扱う。
JSON_PRETTY_PRINT
JSONの構造に即した改行・インデントを適用する。

これによって、ユニコード文字列はエスケープされず、JSONの構造に即した改行・インデントが適用された文字列が得られる。

 

Python3 – bytesとString

概要

Pythonでの文字列表現をバイト列に変換するにはencodeメソッドを用い、バイト列を文字列に変換するにはdecodeメソッドを用いる。encode/decodeの引数には文字コードを指定する。

バイト列をPythonのprint文で出力すると、b'文字列'で表現され、改行文字などはエスケープコード(\nなど)で表示される。

ASCII文字列

encode/decode

ASCII文字列はencode/decodeの引数を'ascii'とする。

ASCIIの場合は引数が'utf-8''shift_jis'としても結果は同じ。

16進表現

bytes.hexメソッドの引数にバイト列を与えると、その16進表現の文字列が得られる。

UTF-8/Shift_JIS

encode/decode

マルチバイト文字の場合、encodedecodeで文字コードを整合させる。

encodedecodeで文字コードが違うと、文字化けするのではなくエラーになる。

ただしerrors引数の設定をデフォルトの'strict’から変更すると、文字化けした文字列などが返される。

16進表現

マルチバイト文字の16進表現はバイト列の表現のとおりになる。

 

Python3 – ファイル操作

ファイル操作の流れ

大まかな流れは以下のとおり。

  • モードを指定してファイルを開く~open
  • ファイルへの読み書きを実行
  • ファイルを閉じる~close

具体的には、openでファイルオブジェクトを取得し、読み書きやcloseなどの操作はファイルオブジェクトに対して実行。

基本形

以下のファイルを準備。行末は全て改行コードで終わっている。

以下のコードは、ファイルを読み込みモードで開き、内容を一つの文字列に一括して読み込んで表示している。

実行結果は以下のとおり。

ファイルの各行末に改行コードがあるため、そこで改行されて表示される。さらにprint関数で自動的に改行コードが付加されるため、最後に空白行が入っている。

with文

with文でopenを指定することにより、withブロック終了時に自動的に終了処理(close)が実行される。

ファイルからの読み込み

read~一括読み込み

readメソッドはファイルの全内容を一つのテキストとして読み込む。

readline~一行読み込み

readlineは実行のたびにファイルから1行ずつ読み込み、ポインターを次の行に進める。読み込む内容がない場合には''を返す。

以下はファイルの内容を2行だけ読みだす例。

以下はファイル内容の全行を1行ずつ取り出す例。

readlines~行に分割して読み込み

readlinesはファイルの内容を行に分解し、各行の内容を要素としたリストを返す。

ファイルへの書き込み

ファイルに書き込む場合、オプションに'w'を指定。既にファイルが存在する場合、その内容は無視されて上書きされる。

write文

write文は引数の文字列を単に書き込む。

print文

print文のfile引数にファイルオブジェクトを指定すると、ファイルに書き込むことができる。この場合、書式設定などを活用することができる。

ファイルへの追記

既存のファイルに追記するには'a'オプションを指定。以下の例では、上で作成されたtest.txtに1行追記している。

ファイルが存在しない場合は、'w'と同様にファイルが作成されて新規に書き込みされる。

 

PHP – cURL

流れ

  1. curl_initでセッションハンドルを得る
  2. ハンドルを使ってcurl_setoptcurl_executeなどを実行する
  3. curl_closeでセッションを閉じる

基本形

curl_initでURLを指定する例

curl_init実行時に引数にURLを与え、そのターゲットに対して実行する例。実行結果は上述と同じ。

実行後、コンソールにサーバーから送られてきたレスポンスが表示される。

curl_setoptでURLを指定する例

curl_initを引数なしで実行後、curl_setoptでURLを指定する例。

ヘッダーも取得

curl_setoptCURLOPT_HEADERtrueに設定すると、レスポンスでヘッダーも取得できる。

実行結果にヘッダーが含まれている。

レスポンスを文字列として受け取る

デフォルトではリクエストに対するレスポンスはコンソールに出力される。

curl_setoptCURLOPT_RETURNTRANSFERtrueに設定すると、curl_execの戻り値としてレスポンスの文字列が返される。このとき画面には出力されない。

POST

  • フォームパラメーターを連想配列で設定する
  • curl_setoptCURLOPT_POSTtrueに設定して、POSTメソッドを指定する
  • curl_setoptCURLOPT_POSTFIELDSとフォームパラメーターの連想配列を指定

フォームパラメーターがセットされている。