スキップしてメイン コンテンツに移動

文字コードのお話

書きかけですが...というか、俺のメモ。


奥が深い...



■文字集合・文字セット (character set)
文字を重複なく集めたもの。


■符号化文字集合 (coded character set、CCS)
ASCII
7bit。
0x5c:バックスラッシュ
0x7e:チルダ

JIS X 0201
ラテン文字用図形文字集合と片仮名用図形文字集合のふたつの文字集合よりなっている。
8bit。
0x5c:円記号
0x7e:オーバーライン
※JIS X 0201-1997 において、文字名称がOVER LINEと規定されているが、図形としてはオーバーラインでなくチルダのような形をとっても良いことが附属書2において記されている。OADG109キーボードでは、オーバーラインが刻印されているが、OADG109Aキーボードでは、チルダが刻印されている。

JIS X 0208:1997
非漢字、第一水準漢字、第二水準漢字

JIS X 0212-1990
補助漢字。この文字集合が単独で使われることはない。JIS X 0208 を拡張する目的で策定された。

JIS X 0213:2000
面区点番号で表される。第一面には、JIS X 0208:1997がすべてと、JIS X 0208:1997の保留領域であった空き領域に、非漢字(659字)、第三水準漢字(1,249字)が収録されている。
第二面には、第四水準漢字(2,436字)が収録されている。

JIS X 0213:2004
JIS X 0213:2000に対して、例示字形の変更、10文字追加が行われた。例示字形の変更に対応したフォントが必要。

JIS X 0221
国際符号化文字集合。UCSのJIS規格。

Unicode
元々は、16bit固定の符号化文字集合。足らなくなったので21bitに拡張。その際、当初の16bit領域を「基本多言語面(BMP)」とした。この領域は、UCS-2で定義される範囲と同一。

ISO/IEC 10646 (UCS; Universal Coded Character Set)
UCS-2
2オクテット(16bit)固定。UnicodeのBMP。

UCS-4
4オクテット(32bit)を基本とする。

Windows-31J(IANA登録名)
Windows Codepage 932
マイクロソフト標準キャラクタセット
見出しの名称は同じものを指す。このキャラクタセットは、次のように構成される。
  • JIS X 0201:1997
  • JIS X 0208:1997
  • NEC特殊文字
  • NEC選定IBM拡張文字
  • IBM拡張文字
※ この符号化文字集合は、0x5Cと0x7eに以下の図形が割り当てられている。
 0x5c:REVERSE SOLIDUS (YEN SIGN)
 0x7e:TILDE



■文字符号化方式 (character encoding scheme、CES)

符号化文字集合の「符号」をバイト列に変換する方式。ある文字集合に含まれる文字を用いて記述した同一の文字(文字列)であっても、符号化方式が異なれば、異なるバイト列となる。また、異なる文字符号化方式の文字列データであっても、基となる文字集合が同じであれば、文字の欠落なく相互変換が可能。

  • US-ASCII
  • ISO-2022-JP
  • Shift_JIS
  • EUC-JP
  • UTF-8
  • UTF-16



■JIS X 0208 を ISO-2022-JP で符号化する方法
区と点をそれぞれ16進に変換し、それぞれに0x20を加算する。
愛:16区6点 → 0x10区0x06点 → 0x3026


■JIS X 0208 を EUC-JP で符号化する方法
区と点をそれぞれ16進に変換し、それぞれに0xA0を加算する。
愛:16区6点 → 0x10区0x06点 → 0xB0A6


■JIS X 0208 を Shift_JIS で符号化する方法
(1) 第1バイト
・1区~62区      (区 - 1) / 2 + 0x81 ※小数点以下切り捨て
・63区~94区   (区 - 1) / 2 + 0xC1 ※小数点以下切り捨て


(2) 第2バイト 区が奇数の場合
・1区~63区       点 + 0x3F
・64区~94区     点 + 0x40


(3) 第2バイト 区が偶数の場合
点 + 0x9E


■WindowsでJIS X 2013:2004 対応後の文字セット
  • WGL4
  • マイクロソフト標準キャラクタ セット
  • JIS X 0212
  • JIS X 0221 非漢字
  • JIS X 0213:2004
  • Unicode 4.0 通貨記号

■Windows Codepage 932
http://msdn.microsoft.com/en-us/goglobal/cc305152


■IANA CHARACTER SETS
http://www.iana.org/assignments/character-sets


■Shift-JIS と Unicode 間の変換問題
http://support.microsoft.com/default.aspx?scid=kb;ja;JP170559
片方向変換しかできない文字の一覧が載っている。

■変換表
http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT
http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit932.txt

コメント

このブログの人気の投稿

Chatの「メッセージは投稿者によって削除されました」を非表示にする方法

Chrome拡張機能を自作してやってみよう! ♪できるかな できるかな ・・・ 無理ぽ (´・ω・`) iframeの中に、実際のメッセージのやり取りが表示されるので、 $(function(){ $('iframe[name^="spareFrame"]').contents().find('[data-is-tombstoned="true"]').hide(); }); って書いたけど An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing. って言われてダメだったよ・・・

cron で実行されたコマンドから出力されたメッセージをメールで送信する方法

本題に入る前に、まずは、sh/bash系のシェルで標準出力と標準エラー出力をリダイレクトする方法から。 現在使用中のシェルを確認するには、 # echo $SHELL とすれば確認できる。 その他、利用できるシェルを確認するには # cat /etc/shells とする。 ■リダイレクトについて commandコマンドが出力を伴うコマンドの場合、commandコマンドの出力をresult.txtへ出力するには # command > result.txt コマンドの実効結果を別のコマンドの入力値とする場合は、|(パイプ)でつなげる。 # command1 | command2 ■標準出力と標準エラー出力について ・標準出力 正常結果やコマンド実行途中に出力されるメッセージの出力先。 ・標準エラー出力 異常終了時のメッセージやエラーメッセージなど、ユーザーに気づいてほしいメッセージの出力先。 ■標準出力と標準エラー出力の両方をリダイレクトする 先のcommandコマンドのリダイレクト例のうち、result.txtへのリダイレクトは、標準出力をリダイレクトしている。そのため、標準エラー出力はリダイレクトされず、仮にcommandコマンドが標準エラー出力へメッセージを出力した場合は、result.txtではなくコンソールへ出力(表示)される。 標準出力と標準エラー出力の両方をリダイレクトして、result.txtへ出力するには、 # command > result.txt 2>&1 とする。 なお、上の例を省略なしで記述すると # command 1> result.txt 2>&1 となる。 この「1」「2」の番号について。 ・1:標準出力。通常はコンソール画面。 ・2:標準エラー出力。通常はコンソール画面。 となっている。 ちなみに、「0」は「標準入力」。通常はキーボードからの入力。 例:標準エラー出力を error.log へ出力する。標準出力はコンソールへ表示する。 # command 2> error.log 例:標準出力は result.log 、標準エラー出力は error.log へ...

cron で bash を使うまでのお話

おー、ほぼ一年ぶりの更新だ・・・ 普段、何気に設定していた cron なんですが、 「PATHは通っていないから、フルパス書いて」 「#!/bin/bash はお呪い」 っていう程度の認識しかなかった。 ので、一からお勉強。 まず、cron の シェル等を確認するには、cron実行ユーザーで [root@localhost ~]# crontab -e * * * * * printenv >/var/tmp/env.txt ってやって1分待つ。 で、1分後に出来上がったファイルの中身を見てみる [root@localhost ~]# cat /var/tmp/env.txt ... SHELL=/bin/sh USER=root PATH=/usr/bin:/bin PWD=/root LANG=ja_JP.UTF-8 SHLVL=1 HOME=/root LOGNAME=root XDG_RUNTIME_DIR=/run/user/0 ... あー、shだ。 どおりで、/bin/bash って書かないと、動かない記述があるわけだ。