Jcode.pmはUnicode Consortiumが1994年に提供したJISコードとunicodeの対応表に、ほぼ、基づいてコード変換しています。このコード変換はUnicode Consortium自身が認めているように、Windowsの実装とは食い違っています。例えば、Unicode 5.0によると、U+301Cは、
もともとJIS C 6226-1978の句点1-33に対応させるように意図されていたが、JISやいくつかの実装とは異なっている。
This character was encoded to match JIS C 6226-1978 1-33 “wave dash”. The JIS standards and some industry practice disagree in mapping.
- 3030 〰 wavy dash
- FF5E ~ fullidth tilde
とあります。そうなら変換テーブルも更新すればいいようなものですが、何か訳の分からない理屈があるようです。次の表の通り、更新されているプログラムはみな、1994年の変換表を使わずに変換しています。
また、~(07/14)はuriによく使われていますが、1994年の変換テーブルで変換するとU+203Eになります。これではuriとして不正になってしまいます。
| 区点 | 文字 | FrontPage Express/ xyzzy/ Aprotool TM Editor/ JVim/ EmEditor/ Netscape Composer 4.72/ Mozilla/ 秀丸エディタ |
Netscape Composer 4.7以前/ Meadow |
Uniedit |
|---|---|---|---|---|
| 05/12 | \ | U+005C | U+00A5 | U+005C |
| 07/14 | ~ | U+007E | U+203E | U+007E |
| 01-32 | \ | U+FF3C | U+005C | U+005C |
| 01-33 | 〜 | U+FF5E | U+301C | U+301C |
| 01-34 | ‖ | U+2225 | U+2016 | U+2016 |
| 01-61 | − | U+FF0D | U+2212 | U+2212 |
| 01-81 | ¢ | U+FFE0 | U+00A2 | U+00A2 |
| 01-82 | £ | U+FFE1 | U+00A3 | U+00A3 |
| 02-44 | ¬ | U+FFE2 | U+00AC | U+00AC |
Jcode.pmのコード変換テーブルをよく使われる対応にあわせるため、Jcode-0.88.zipをc:\に「ディレクトリ付き」で解凍してできる、c:\Jcode-0.88\unicode\euc2uni.hとc:\Jcode-0.88\unicode\uni2euc.hに次の変更を行いました。
また、JIS X 0212とのマッピングについても、2-23チルドと2-35破断線で異なっています。2-23をU+FF5Eにすると01-33と重なるので、Spacing Modifier LettersのSmall Tilde:U+02DCに変更しました。
| 句点 | 文字 | euc | 変更前 | 変更後 | ||||
|---|---|---|---|---|---|---|---|---|
| 文字 | 名前 | unicode | 文字 | 名前 | unicode | |||
| JIS X 0201 | ||||||||
| 05/12 | \ | 0x5c | \ | Yen Sign | U+00A5 | ¥ | Reverse Solidus | U+005C |
| 07/14 | ~ | 0x7e | ‾ | Overline | U+203E | ~ | Tilde | U+007E |
| JIS X 0208 | ||||||||
| 01-32 | \ | 0xa1c0 | \ | Fullwidth Reverse Solidus | U+FF3C | \ | Fullwidth Reverse Solidus | U+FF3C |
| 01-33 | 〜 | 0xa1c1 | 〜 | Wave Dash | U+301C | ~ | Fullwidth Tilde | U+FF5E |
| 01-34 | ‖ | 0xa1c2 | ‖ | Double Vertical Line | U+2016 | ∥ | Parallel To | U+2225 |
| 01-61 | − | 0xa1dd | − | Minus Sign | U+2212 | - | Fullwidth Hyphen-Minus | U+FF0D |
| 01-81 | ¢ | 0xa1f1 | ¢ | Cent Sign | U+00A2 | ¢ | Fullwidth Cent Sign | U+FFE0 |
| 01-82 | £ | 0xa1f2 | £ | Pound Sign | U+00A3 | £ | Fullwidth Pound Sign | U+FFE1 |
| 02-44 | ¬ | 0xa2cc | ¬ | Fullwidth Not Sign | U+00AC | ¬ | Not Sign | U+FFE2 |
| JIS X 0212 | ||||||||
| 02-23 | ˜ | 0x8fa2b7 | ~ | Tilde | U+007E | ˜ | Small Tilde(*1) | U+02DC |
| 02-35 | ¦ | 0x8fa2c3 | ¦ | Broken Bar | U+00A6 | ¦ | Fullwidth Broken Bar | U+FFE4 |
| unicode | 文字 | 名前 | 変更前 | 変更後 | ||||
|---|---|---|---|---|---|---|---|---|
| euc | 句点 | 文字 | euc | 句点 | 文字 | |||
| U+005C | \ | Reverse Solidus | 0x5c | 05/12 | \ | 0x5c | 05/12 | \ |
| U+007E | ~ | Tilde | 0x7e | 07/14 | ~ | 0x7e | 07/14 | ~ |
| U+00A2 | ¢ | Cent Sign | 0xa1f1 | 01-81 | ¢ | 0xa1f1 | 01-81 | ¢ |
| U+00A3 | £ | Pound Sign | 0xa1f2 | 01-82 | £ | 0xa1f2 | 01-82 | £ |
| U+00A5 | ¥ | Yen Sign | 0x5c | 05/12 | \ | 0x5c | 05/12 | \ |
| U+00A6 | ¦ | Broken Bar | 0x8fa2c3 | 02-35 | ¦ | 0x8fa2c3 | 02-35 | ¦ |
| U+00AC | ¬ | Not Sign | 0xa2cc | 02-44 | ¬ | 0xa2cc | 02-44 | ¬ |
| U+02DC | ˜ | Small Tilde(*1) | 0x8fa2b7 | 02-23 | ˜ | |||
| U+2016 | ‖ | Double Vertical Line | 0xa1c2 | 01-34 | ‖ | 0xa1c2 | 01-34 | ‖ |
| U+203E | ‾ | Overline | 0x7e | 07/14 | ~ | 0x7e | 07/14 | ~ |
| U+2212 | − | Minus Sign | 0xa1dd | 01-61 | − | 0xa1dd | 01-61 | − |
| U+2225 | ∥ | Parallel To | 0xa1c2 | 01-34 | ‖ | |||
| U+301C | 〜 | Wave Dash | 0xa1c1 | 01-33 | 〜 | 0xa1c1 | 01-33 | 〜 |
| U+FF0D | - | Fullwidth Hyphen-Minus | 0xa1dd | 01-61 | − | |||
| U+FF3C | \ | Fullwidth Reverse Solidus | 0xa1c0 | 01-32 | \ | 0xa1c0 | 01-32 | \ |
| U+FF5E | ~ | Fullwidth Tilde | 0xa1c1 | 01-33 | 〜 | |||
| U+FFE0 | ¢ | Fullwidth Cent Sign | 0xa1f1 | 01-81 | ¢ | |||
| U+FFE1 | £ | Fullwidth Pound Sign | 0xa1f2 | 01-82 | £ | |||
| U+FFE2 | ¬ | Fullwidth Not Sign | 0xa2cc | 02-44 | ¬ | |||
| U+FFE4 | ¦ | Fullwidth Broken Bar | 0x8fa2c3 | 02-35 | ¦ | |||
C:>cd \Program Files\Microsoft Visual Studio\VC98\bin C:\Program Files\Microsoft Visual Studio\VC98\bin>vcvars32.bat Setting environment for using Microsoft Visual C++ tools.次にjcode.pmを解凍したフォルダに移動し、perl makefile.plを実行します。
C:\Program Files\Microsoft Visual Studio\VC98\bin>cd \ C:\>cd jcode-0.88 C:\jcode-0.88>perl makefile.pl Checking if your kit is complete... Looks good Writing Makefile for Jcode::Unicode Writing Makefile for Jcodeとなれば、コンパイルの準備ができています。ここで、nmakeを実行すればコンパイルできるはずなのですが、
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0 Copyright (C) Microsoft Corp 1988-1998. All rights reserved. cl -c -O1 -MD -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DPERL_MSVCRT_READFIX -O1 -MD -DNDEBUG -DVERSION=\"0.59\" -DXS_VERSION=\"0.59\" -IC:\perl\lib\CORE Unicode.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. Unicode.c "Running Mkbootstrap for Jcode::Unicode ()" C:\perl\bin\Perl.exe -IC:\perl\lib -IC:\perl\lib -MExtUtils::Command -e chmod 644 Unicode.bs link -out:..\blib\arch\auto\Jcode\Unicode\Unicode.dll -dll -nologo -node faultlib -release -libpath:"C:\perl\lib\CORE" -machine:x86 Unicode.obj C:\perl\lib\CORE\perl56.lib oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib -def:Unicode.def ライブラリ ..\blib\arch\auto\Jcode\Unicode\Unicode.lib とオブジェクト ..\blib\arch\auto\Jcode\Unicode\Unicode.exp を作成中 C:\perl\bin\Perl.exe -IC:\perl\lib -IC:\perl\lib -MExtUtils::Command -e chmod 755 ..\blib\arch\auto\Jcode\Unicode\Unicode.dll C:\perl\bin\Perl.exe -IC:\perl\lib -IC:\perl\lib -MExtUtils::Command -e cp Unicode.bs ..\blib\arch\auto\Jcode\Unicode\Unicode.bs C:\perl\bin\Perl.exe -IC:\perl\lib -IC:\perl\lib -MExtUtils::Command -e chmod 644 ..\blib\arch\auto\Jcode\Unicode\Unicode.bs C:\jcode-0.88>とオブジェクトができました。
C:\jcode-0.88>nmake test t\convert...........ok t\getcode...........ok t\h2z...............ok t\length............ok t\mime..............ok t\new...............ok t\tr................ok All tests successful. Files=7, Tests=126, 8 wallclock secs ( 0.00 cusr + 0.00 csys = 0.00 CPU) 'No tests defined for Jcode::Unicode extension.' C:\jcode-0.88>となればokです。
C:\Jcode-0.88>nmake install Microsoft (R) Program Maintenance Utility Version 6.00.8168.0 Copyright (C) Microsoft Corp 1988-1998. All rights reserved. Installing C:\perl\site\lib\auto\Jcode\Unicode\Unicode.dll Installing C:\perl\site\lib\auto\Jcode\Unicode\Unicode.lib Installing C:\perl\site\lib\auto\Jcode\Unicode\Unicode.exp Installing C:\perl\site\lib\auto\Jcode\Unicode\Unicode.bs Installing C:\perl\site\lib\mac_install.pl Installing C:\perl\site\lib\win_install.pl Installing C:\perl\site\lib\Jcode.pm Installing C:\perl\site\lib\Jcode\Tr.pm Installing C:\perl\site\lib\Jcode\H2Z.pm Installing C:\perl\site\lib\Jcode\Constants.pm Installing C:\perl\site\lib\Jcode\_test.pl Installing C:\perl\site\lib\Jcode\Unicode.pm Installing C:\perl\site\lib\Jcode\Unicode\Constants.pm Installing C:\perl\site\lib\Jcode\Unicode\NoXS.pm Writing C:\perl\site\lib\auto\Jcode\.packlist Appending installation info to C:\perl\lib/perllocal.pod C:\Jcode-0.88>念のため、ロードモジュールがないときに動作するC:\perl\site\lib\jcodeの下のUnicodeフォルダを削除してもutf-8のページをHTML Lintでチェックできたので正しく動作しているようです。
コンパイル結果とロードモジュールを使う場合に必要なモジュールだけを纏めて圧縮ファイルを作りました。jcwin-0.88.zipをご利用ください。旧バージョンjcwin-0.87.zipもしばらく置いておきます。
Perl 5.8の場合は、本来encodeに移行するべきなのですが、Perl 5.8上でコンパイルしたjcwin8-0.88.zipでも動作するようです。
lhmletで解凍する場合、「ディレクトリ付き」で解凍して、perlを組み込んだボリューム、例えばc:\を指定すれば組み込めるはずです。c:\perlのような標準でない名称のディレクトリにperlが組み込んである場合は、解凍した場所から対応するディレクトリにコピーしてください。ソースの差分と異なるモジュールをjcodediff.zipとしておいています。