
        各文字規格エンコード/デコードマクロ

                                     by Tabby Software Magic
                                            15-FEB-2010(MON)
                               http://www1.ocn.ne.jp/~tabby/



.§配布規定

• 著作権は放棄しませんが、特許その他の権利は主張しません。
• 不具合を速やかに修正する保証は出来ませんので、必ずソース込
  みで配布するか、ソースが得られるポインタを示すか、をして下
  さい。
• このアーカイブに含まれるファイルによって発生した不利益に対
  して、作者は責を負いません。
• 将来の互換性は保証しません。
• 天は自らハックする者を助く。
  Use the source, Luke!



.§機能

• 以下の文字セットにエンコードします。
    Unicode 系
      Octet, UTF-8, UTF-7
    ISO-2022-JP 系
      CP50221, ISO-2022-JP-2004, ISO-2022-JP-1, ISO-2022-JP,
      ISO-2022-JP (特盛)
    EUC-JP 系
      CP51932, EUC-JP-2004, EUC-JP (rich), EUC-JP (poor),
      EUC-JP (特盛,0213), EUC-JP (特盛,Win31J)
    Shift_JIS 系
      CP932, Shift_JIS-2004, Shift_JIS
    Web 系
      Base64, Base32, Punycode, RACE
• 以下の文字セットからデコードします。
    Unicode 系
      Octet, UTF-8, UTF-7, UTF-16
    ISO-2022-JP 系
      ISO-2022-JP (半角優先), ISO-2022-JP (全角優先,CP50221)
    EUC-JP 系
      EUC-JP (半角優先,0213), EUC-JP (半角優先,Win31J),
      EUC-JP (全角優先,0213), EUC-JP (全角優先,Win31J/CP51932)
    Shift_JIS 系
      Shift_JIS (半角優先,0213), Shift_JIS (半角優先,Win31J),
      Shift_JIS (全角優先,0213), Shift_JIS (全角優先,Win31J),
      CP932
    Web 系
      Base64, Base32, MIME header, Punycode, RACE



.§ファイル

• chcv_codec.txt
  あなたが今読んでいるこのファイルです。
  アウトラインタグ(行頭のピリオド)が付けてあります。
• chcv_encode.jsee
  エンコーダです。
• chcv_decode.jsee
  デコーダです。



.§インストール

EmEditor のマクロのパスにコピーして、マクロのカスタマイズから
マイマクロに登録して下さい。



.§使い方

文字を箱型以外で選択して、マクロを起動して下さい。
選択状態にない場合は、クリップボードの内容を対象にします。

各規格での変換結果をメニュー表示する際、規格名の前に記号を付
けます。
    ○ : 正常に変換しました。
    △ : 変換出来ない文字を〓に置き換えました。
    × : 変換出来ませんでした。
を意味します。

以下の説明で、◯の中の文字はショートカットです。

..▽エンコード

エンコードでエラーがあると、その文字を
    〓(U+nnnn)
と置き換えます。

...◇Unicode 系

....ⓄOctet

バイト単位で %nn 表記にします。Unicode 文字は UTF-16 にして、
BMP 外の文字はサロゲートペアで表します。
例えば
    𠮷野家
は
    U+20BB7(U+D842, U+DFB7), U+91CE, U+5BB6
なので
    %D8%42%DF%B7%91%CE%5B%B6
になります。
    %02%0B%B7%91%CE%5B%B6
にはなりません。

....⑧UTF-8

   01〜    7F  ASCII 互換
   80〜   7FF  2 バイト
  800〜  FFFF  3 バイト
10000〜10FFFF  4 バイト

UTF-8 に変換してバイト単位で %nn 表記にします。サロゲートペア
の文字は組み立ててから変換します。
例えば
    𠮷野家
は
    %F0%A0%AE%B7%E9%87%8E%E5%AE%B6
になります。
    %ED%A1%82%ED%BE%B7%E9%87%8E%E5%AE%B6
にはなりません。

....⑦UTF-7

ASCII 以外の文字を UTF-16 として Base64 エンコードして、+ と
- で囲みます。単独の + は +- になります。

...◇ISO-2022-JP 系

                      0213  78JIS  W31J  0212  ASCII  0201  Kana
CP50221                ―    ―     Ⓦ    ―    Ⓐ     ―    ㋕
ISO-2022-JP-2004       ③    ―     ―    ―    Ⓐ     ―    ―
ISO-2022-JP-1          ―    ⑦     ―    ②    Ⓐ     ①    ―
ISO-2022-JP            ―    ⑦     ―    ―    Ⓐ     ①    ―
ISO-2022-JP (特盛)     ③    ⑦     Ⓦ    ②    Ⓐ     ①    ㋕

....⓪CP50221 (Win31J,Kana)

%1B(B   00〜7F  ASCII
%1B(I   21〜5F  JIS X 0201 Kana
%1B$B   21〜7E  Windows-31J

JIS X 0208 に加えて、NEC 特殊文字、IBM 拡張文字と所謂半角カナ
が使えます。つまり、Windows 日本語文字セットの ISO-2022 的表
現です。

....◯ISO-2022-JP-2004 (0213)

%1B(B   00〜7F  ASCII
%1B$(Q  21〜7E  JIS X 0213:2004 第 1 面
%1B$(P  21〜7E  JIS X 0213:2004 第 2 面

JIS X 0213 が使えます。

....◯ISO-2022-JP-1 (0208,0212)

%1B(B   00〜7F  ASCII
%1B(J   21〜7E  JIS X 0201 Roman
%1B$B   21〜7E  JIS X 0208-1990
%1B$@   21〜7E  JIS X 0208-1978
%1B$(D  21〜7E  JIS X 0212-1990

JIS X 0208-1990 と JIS X 0208-1978、ASCII と JIS X 0201 を区
別出来る他に、JIS X 0212 が使えます。

....◯ISO-2022-JP (0208)

%1B(B   00〜7F  ASCII
%1B(J   21〜7E  JIS X 0201 Roman
%1B$B   21〜7E  JIS X 0208-1990
%1B$@   21〜7E  JIS X 0208-1978

JIS X 0208-1990 と JIS X 0208-1978、ASCII と JIS X 0201 を区
別して使えます。ありがちな ISO-2022-JP です。

....ⒿISO-2022-JP (特盛)

%1B(B   00〜7F  ASCII
%1B(J   21〜7E  JIS X 0201 Roman
%1B(I   21〜5F  JIS X 0201 Kana
%1B$B   21〜7E  Windows-31J
%1B$@   21〜7E  JIS X 0208-1978
%1B$(Q  21〜7E  JIS X 0213:2004 第 1 面
%1B$(P  21〜7E  JIS X 0213:2004 第 2 面
%1B$(D  21〜7E  JIS X 0212-1990

正式な規格ではありませんが、ユーザ定義文字が使えない以外は、
最も多くの文字を使えます。

...◇EUC-JP 系

                      0213  78JIS  W31J  0212  ASCII  0201  Kana
CP51932                ―    ―     Ⓦ    ―    Ⓐ     ―    ㋕
EUC-JP-2004            ③    ―     ―    ―    Ⓐ     ―    ㋕
EUC-JP (rich)          ―    ―     ―    ②    Ⓐ     ―    ㋕
EUC-JP (poor)          ―    ―     ―    ―    Ⓐ     ―    ―
EUC-JP (特盛,0213)     ③    ―     ―    ②    Ⓐ     ―    ㋕
EUC-JP (特盛,Win31J)   ―    ―     Ⓦ    ②    Ⓐ     ―    ㋕

....①CP51932 (Win31J,Kana)

G0      00〜7F  ASCII
G1      A1〜FE  Windows-31J
G2(8E)  A1〜DF  JIS X 0201 Kana

JIS X 0208 に加えて、NEC 特殊文字と IBM 拡張文字を使えます。
つまり、Windows 日本語文字セットの EUC 的表現です。


....ⒺEUC-JP-2004 (0213,Kana)

G0      00〜7F  ASCII
G1      A1〜FE  JIS X 0213:2004 第 1 面
G2(8E)  A1〜DF  JIS X 0201 Kana
G3(8F)  A1〜FE  JIS X 0213:2004 第 2 面

JIS X 0213 が使えます。

....ⓊEUC-JP (rich)

G0      00〜7F  ASCII
G1      A1〜FE  JIS X 0208-1990
G2(8E)  A1〜DF  JIS X 0201 Kana
G3(8F)  A1〜FE  JIS X 0212-1990

シングルシフトを使って、JIS X 0212 と所謂半角カナが使えます。

....◯EUC-JP (poor)

G0      00〜7F  ASCII
G1      A1〜FE  JIS X 0208-1990

シングルシフトに対応しない、ありがちな EUC-JP です。

....◯EUC-JP (特盛,0213)

G0      00〜7F  ASCII
G1      A1〜FE  JIS X 0213:2004 第 1 面
G2(8E)  A1〜DF  JIS X 0201 Kana
G3(8F)  A1〜FE  JIS X 0213:2004 第 2 面 / JIS X 0212-1990

正式な規格ではありませんが、JIS X 0213 と JIS X 0212 を同時に
使えます。

....◯EUC-JP (特盛,Win31J)

G0      00〜7F  ASCII
G1      A1〜FE  Windows-31J
G2(8E)  A1〜DF  JIS X 0201 Kana
G3(8F)  A1〜FE  JIS X 0212-1990

正式な規格ではありませんが、NEC 特殊文字と IBM 拡張文字を使え
ます。

...◇Shift_JIS 系

                      0213  78JIS  W31J  0212  ASCII  0201  Kana
CP932                  ―    ―     Ⓦ    ―    Ⓐ     ―    ㋕
Shift_JIS-2004         ③    ―     ―    ―    ―     ①    ㋕
Shift_JIS              ―    ―     ―    ―    ―     ①    ㋕

....⑨CP932 (Win31J)

    00〜7F          ASCII
    A1〜DF          JIS X 0201 Kana
1st 81〜9F, E0〜FC  Windows-31J
2nd 40〜7E, 80〜FC

JIS X 0208 に加えて、NEC 特殊文字、IBM 拡張文字、ユーザ定義文
字を使えます。つまり、Windows 日本語文字セットの Shift_JIS 的
表現です。
唯一、ユーザ定義文字を使えます。

....ⓈShift_JIS-2004 (0213,0201)

    00〜7F          JIS X 0201 Roman
    A1〜DF          JIS X 0201 Kana
1st 81〜9F, E0〜FC  JIS X 0213:2004
2nd 40〜7E, 80〜FC

JIS X 0213 が使えます。

....ⓗShift_JIS (0208,0201)

    00〜7F          JIS X 0201 Roman
    A1〜DF          JIS X 0201 Kana
1st 81〜9F, E0〜FC  JIS X 0208-1990
2nd 40〜7E, 80〜FC

NEC 特殊文字、IBM 拡張文字とユーザ定義文字を除外した、JIS 規
格に忠実な Shift_JIS です。

...◇Web 系

....ⒷBase64

文字列、又は %nn か =nn の 16 進数の羅列を Base64 にします。

....③Base32

文字列、又は %nn か =nn の 16 進数の羅列を Base32 にします。

....ⓅPunycode

文字列を Punycode にします。

....ⓇRACE

文字列を RACE にします。

..▽デコード

デコードでエラーがあると、その文字を
    〓(0xnn)
    〓(区-点)
    〓(規格:区-点)
等と置き換えます。

...◇Unicode 系

....ⓄOctet

%nn 表記をバイト単位で UTF-16 にします。
Unicode の文字もバイト単位で強引に処理します。
例えば
    卥捲整
は
    U+5365, U+6372, U+6574
なので、変換すると
    Secret
になります。

....⑧UTF-8

%nn 表記の UTF-8 を UTF-16 にします。

....⑦UTF-7

UTF-7 表記を UTF-16 にします。

....⑥UTF-16

%nn 表記 2 つずつを UTF-16 にします。

...◇ISO-2022-JP 系

....ⒿISO-2022-JP (半角優先)

%1B(B   00〜7F  ASCII
%1B(J   21〜7E  JIS X 0201 Roman
%1B(I   21〜5F  JIS X 0201 Kana
%1B$B   21〜7E  Windows-31J
%1B$@   21〜7E  JIS X 0208-1978
%1B$(Q  21〜7E  JIS X 0213:2004 第 1 面
%1B$(P  21〜7E  JIS X 0213:2004 第 2 面
%1B$(O  21〜7E  JIS X 0213:2000 第 1 面 (2004 追加文字を除く)
%1B$(D  21〜7E  JIS X 0212-1990

これらを UTF-16 にします。
多バイト文字の英数字や記号の内、ASCII か 0201 Roman で表現可
能な文字はそちらを優先します。

....⓪ISO-2022-JP (全角優先,CP50221)

変換可能な文字は半角優先と同じですが、多バイト文字の英数字や
記号の内、Halfwidth and Fullwidth Forms で表現可能な文字はそ
ちらを優先します。

...◇EUC-JP 系

....ⒺEUC-JP (半角優先,0213)

G0      00〜7F  ASCII
G1      A1〜FE  JIS X 0213:2004 第 1 面
G2(8E)  A1〜DF  JIS X 0201 Kana
G3(8F)  A1〜FE  JIS X 0213:2004 第 2 面 / JIS X 0212-1990

JIS X 0208 にないコードポイントは JIS X 0213 に変換します。
多バイト文字の英数字や記号の内、ASCII か 0201 Roman で表現可
能な文字はそちらを優先します。

....ⓊEUC-JP (半角優先,Win31J)

G0      00〜7F  ASCII
G1      A1〜FE  Windows-31J
G2(8E)  A1〜DF  JIS X 0201 Kana
G3(8F)  A1〜FE  JIS X 0212-1990

JIS X 0208 にないコードポイントは Windows-31J に変換します。
多バイト文字の英数字や記号の内、ASCII か 0201 Roman で表現可
能な文字はそちらを優先します。

....◯EUC-JP (全角優先,0213)

変換可能な文字は半角優先と同じですが、多バイト文字の英数字や
記号の内、Halfwidth and Fullwidth Forms で表現可能な文字はそ
ちらを優先します。

....①EUC-JP (全角優先,Win31J/CP51932)

変換可能な文字は半角優先と同じですが、多バイト文字の英数字や
記号の内、Halfwidth and Fullwidth Forms で表現可能な文字はそ
ちらを優先します。

...◇Shift_JIS 系

....ⓈShift_JIS (半角優先,0213)

    00〜7F          JIS X 0201 Roman
    A1〜DF          JIS X 0201 Kana
1st 81〜9F, E0〜FC  JIS X 0213:2004
2nd 40〜7E, 80〜FC

JIS X 0208 にないコードポイントは JIS X 0213 に変換します。
多バイト文字の英数字や記号の内、ASCII か 0201 Roman で表現可
能な文字はそちらを優先します。

....ⓗShift_JIS (半角優先,Win31J)

    00〜7F          ASCII
    A1〜DF          JIS X 0201 Kana
1st 81〜9F, E0〜FC  Windows-31J
2nd 40〜7E, 80〜FC

JIS X 0208 にないコードポイントは Windows-31J に変換します。
多バイト文字の英数字や記号の内、ASCII か 0201 Roman で表現可
能な文字はそちらを優先します。

....◯Shift_JIS (全角優先,0213)

変換可能な文字は半角優先と同じですが、多バイト文字の英数字や
記号の内、Halfwidth and Fullwidth Forms で表現可能な文字はそ
ちらを優先します。

....◯Shift_JIS (全角優先,Win31J)

変換可能な文字は半角優先と同じですが、多バイト文字の英数字や
記号の内、Halfwidth and Fullwidth Forms で表現可能な文字はそ
ちらを優先します。

....⑨CP932 (Win31J,ASCII)

多バイト文字は「全角優先,Win31J」と同じで、所謂半角文字は 0201
ではなく ASCII にします。

...◇Web 系

....ⒷBase64

Base64 の文字列を %nn 形式に戻します。
更に文字に直すには Octet 等を使って下さい。

....③Base32

Base32 の文字列を %nn 形式に戻します。
更に文字に直すには Octet 等を使って下さい。

....ⓂMIME header

=?《文字エンコード》?《バイナリエンコード》?《データ》?=

文字エンコードは
    UTF-8
    ISO-2022-JP
    EUC-JP
    Shift_JIS
バイナリエンコードは
    B (Base64)
    Q (quoted-printable)
を認識して、元の文字列に戻します。

....ⓅPunycode

Punycode を元の文字列に戻します。
頭の 'xn--' はあってもなくても構いません。

....ⓇRACE

RACE を元の文字列に戻します。
頭の 'bq--' はあってもなくても構いません。



.§バグ

• 78JIS→83JIS で字形が変更になった文字の内、Unicode 上で区別
  が付く文字は、全部拾いきれた自信がありません。



.§謝辞

このソフトウェアを作るにあたって、以下のツール、資料等を使用
しました。関係各位に感謝します。

..▽マシン / OS

• HP Mini 1000 Vivienne Tam Edition     Hewlett Packard
• Microsoft Windows 7 Home Premium      Microsoft

..▽ソフトウェア

• EmEditor Professional 9.11            Emurasoft
• WZ EDITOR 6.0.74                      WZ Software
• Ruby 1.8.7 [i386-mswin32]             まつもとゆきひろ
• some GNU tools                        Free Software Foundation

..▽資料

• JIS X 0213  7 ビット及び 8 ビットの 2 バイト情報交換用符号
  化拡張漢字集合
    財団法人日本規格協会
• JIS X 0212  情報交換用漢字符号―補助漢字
    財団法人日本規格協会
• 入門 JavaScript
    著者 : 久野靖
    発行 : 株式会社アスキー
    ISBN : 4-7561-3871-3
• パソコンにおける日本語処理／文字コードハンドブック
    著者 : 川俣晶
    発行 : 株式会社技術評論社
    ISBN : 4-7741-0780-8
• Punycode: アプリケーションにおいてドメイン名国際化(IDNA)を
  行うためのUnicodeのBootstringエンコーディング
    URI : http://www.jdna.jp/survey/rfc/rfc3492j.html
• 文字コードの部屋 -- Unicode のエンコーディング
    URI : http://mikeneko.creator.club.ne.jp/~lab/kcode/uni-encode.html
• 新英和中辞典 電子ブック版
    発行 : 研究社
    品番 : YRRS-009



.§履歴

▽15-FEB-2010(MON)
• 変換結果に '&' があるとショートカットになってしまう不具合を
  修正。

▽14-FEB-2010(SUN)
• 出来た。動いた。



.§ざれごと

▽14-FEB-2010(SUN)
ネットで拾ったファイルの名前が %nn の羅列だったんで、それをデ
コードしたくて作り始めた物。

