本日は前回のISO-2022-JPのPerlにおける使用法について研究します。
PerlのUnicodeサポートでは、iso-2022-jpというEncode名でISO-2022-JPをサポートします。
ちょっと洒落心で最後の行に半角カナを入れてみました。
どうなるでしょう。
端末がUTF-8状態だったので文字化けしてしまいましたので、iso.txtというファイルにリダイレクトしました。
出力された文字をダンプしてみます。
半角カナは全角カナに変換して表示されていますね。
一方、Perlは7bit-jisというエンコーディング名もサポートしています。これも使ってみます。
7bit-jisは、半角カナをサポートしています。
これは、ISO-2022-JPに半角カナを追加したもので、切り替えにISO 2022の枠組みのEsc $ I(0x1B 28 49)を入れています。Microsoft Outlook方式ですね。
ISO-2022-JPは、RFC1468というインターネットの決まりで明文化されているものですが、RFC1468には半角カナはありません。
が、ISO 2022には、JIS X 0201の右面7ビット符号(いわゆる半角カナbの7ビットコード)のエスケープ シーケンスがEsc $ Iであるむね明記されています。
画面を見ると、MacのCot Editorはこの形式を解しますね。Emacsも、Windowsも秀丸もxyzzyもサクラエディタもこの方式を解して半角カナを表示するので、この方式はISO-2022-JPの半角カナ許容拡張としてはポピュラーな方式でしょう。
Perlの:encoding指定では、iso-2022-jpが半角カナを全角カナに変換し、半角カナを通すには7bit-jisにする必要があるので注意しましょう。
#! /usr/local/bin/perl
# test_iso-2022-jp.pl -- iso-2022-jpの実験
use strict;
use warnings;
use 5.010;
use utf8;
binmode STDOUT, ":encoding(iso-2022-jp)";
say "ABアイ\nウエ12\nオカ";
# test_iso-2022-jp.pl -- iso-2022-jpの実験
use strict;
use warnings;
use 5.010;
use utf8;
binmode STDOUT, ":encoding(iso-2022-jp)";
say "ABアイ\nウエ12\nオカ";
ちょっと洒落心で最後の行に半角カナを入れてみました。
どうなるでしょう。
[sample]$ ./test_iso-2022-jp.pl > iso.txt
AB^[$B%"%$^[(B
^[$B%&%(^[(B12
^[$B%*%+^[(B
[sample]$ ./test_iso-2022-jp.pl > iso.txt
AB^[$B%"%$^[(B
^[$B%&%(^[(B12
^[$B%*%+^[(B
[sample]$ ./test_iso-2022-jp.pl > iso.txt
端末がUTF-8状態だったので文字化けしてしまいましたので、iso.txtというファイルにリダイレクトしました。
出力された文字をダンプしてみます。
A B Esc $ B ア イ Esc ( B (改行)
41 42 1b 24 42 25 22 25 24 1b 28 42 0a
Esc $ B ウ エ Esc ( B 1 2 (改行)
1b 24 42 25 26 25 28 1b 28 42 31 32 0a
Esc $ B オ カ Esc ( B (改行)
1b 24 42 25 2a 25 2b 1b 28 42 0a
41 42 1b 24 42 25 22 25 24 1b 28 42 0a
Esc $ B ウ エ Esc ( B 1 2 (改行)
1b 24 42 25 26 25 28 1b 28 42 31 32 0a
Esc $ B オ カ Esc ( B (改行)
1b 24 42 25 2a 25 2b 1b 28 42 0a
半角カナは全角カナに変換して表示されていますね。
一方、Perlは7bit-jisというエンコーディング名もサポートしています。これも使ってみます。
#! /usr/local/bin/perl
# test_7bit_jis.pl -- 7bit jisの実験
use strict;
use warnings;
use 5.010;
use utf8;
binmode STDOUT, ":encoding(7bit-jis)";
say "ABアイ\nウエ12\nオカ";
# test_7bit_jis.pl -- 7bit jisの実験
use strict;
use warnings;
use 5.010;
use utf8;
binmode STDOUT, ":encoding(7bit-jis)";
say "ABアイ\nウエ12\nオカ";
A B Esc $ B ア イ Esc ( B (改行)
41 42 1b 24 42 25 22 25 24 1b 28 42 0a
Esc $ B ウ エ Esc ( B 1 2 (改行)
1b 24 42 25 26 25 28 1b 28 42 31 32 0a
Esc $ I ヲ カ Esc ( B (改行)
1b 24 49 35 36 1b 28 42 0a
41 42 1b 24 42 25 22 25 24 1b 28 42 0a
Esc $ B ウ エ Esc ( B 1 2 (改行)
1b 24 42 25 26 25 28 1b 28 42 31 32 0a
Esc $ I ヲ カ Esc ( B (改行)
1b 24 49 35 36 1b 28 42 0a
7bit-jisは、半角カナをサポートしています。
これは、ISO-2022-JPに半角カナを追加したもので、切り替えにISO 2022の枠組みのEsc $ I(0x1B 28 49)を入れています。Microsoft Outlook方式ですね。
ISO-2022-JPは、RFC1468というインターネットの決まりで明文化されているものですが、RFC1468には半角カナはありません。
が、ISO 2022には、JIS X 0201の右面7ビット符号(いわゆる半角カナbの7ビットコード)のエスケープ シーケンスがEsc $ Iであるむね明記されています。
画面を見ると、MacのCot Editorはこの形式を解しますね。Emacsも、Windowsも秀丸もxyzzyもサクラエディタもこの方式を解して半角カナを表示するので、この方式はISO-2022-JPの半角カナ許容拡張としてはポピュラーな方式でしょう。
Perlの:encoding指定では、iso-2022-jpが半角カナを全角カナに変換し、半角カナを通すには7bit-jisにする必要があるので注意しましょう。