No.148 | 投稿日時: | 2004/03/11(木) 12:31 <親記事> |
投稿者: | ひろせ |
CPANなどざっと探して見つからなかったのですが、eucJP-msのperlでの実装を知らないでしょうか?
No.149 | 投稿日時: | 2004/03/16(火) 02:11 <↑親記事:No.148> |
投稿者: | 森山 将之 |
Encode.pm 用の eucJP-ms の実装を考えていた時期もあるのですが、結局、実装せずにずるずると来てしまいました。
cp51932 も実装しないと、たぶんダメだと思うんですが…
基本的には、Windows の機種依存文字は、Windows-31J(cp932) で扱うのが安全なんで、余計なものを作って、eucJP-ms と cp51932 の違いを知らずにハマッてしまう人を出さない方がいいのかなと消極的に考えてみたり…
No.151 | 投稿日時: | 2004/03/17(水) 08:55 <↑親記事:No.149> |
投稿者: | ひろせ |
Jcodeでh2zやtrを使いたいといった要望がLingua::JA::Regularをはじめ、それなりにあると思います。しかしJcode-0.83ではIBM拡張文字をeucにすると正しいsjisのコードポイントに戻らなくなってしまうのでcp932な文字列にはこれらの処理ができません。
そこでJcodeを弄っているところで、cp932 <-> eucjp-msの変換はなんとなくできるようになりました。まだリリースできるレベルではないのですが、お伺いをたてる意味でとりあえずMLにパッチを送ってみようかなぁと思ってるところです。
# まぁPerl 5.8のEncodeや森山さんのパッチがとりこまれたiconvが普及するまでのつなぎなんですが。
No.152 | 投稿日時: | 2004/03/18(木) 01:56 <↑親記事:No.151> |
投稿者: | 森山 将之 |
日本語EUC で Windows の機種依存文字を扱うためのエンコーディングは私が知っているのだけで、次の 2 種類が存在します。
・Windows Code Page 51932
・eucJP-open (Unicode 経由で cp932 との相互変換を実現する場合は eucJP-ms)
Windows Code Page 51932 (以後、cp51932 とします) という Windows で使用されている日本語EUCは、IBM拡張文字のコードポイントをNEC選定IBM拡張文字やNEC特殊文字、JIS文字のコードポイントに集約してから、計算により EUC に変換しています。
EUC から CP932 への変換で注意すべき点としては、計算で CP932 に変換した後に、NEC選定IBM拡張文字のコードポイントを IBM拡張文字とJIS文字のコードポイントに置換する必要がありますので、ご注意ください。
eucJP-open は、JIS X 0212 で定義されている文字に関しては、JIS X 0212 のコードポイントを使用しますので、IBM拡張文字を JIS X 0212 や JIS X 0212 の空き領域にマッピングするたのマッピングテーブルが必要になってきます。
NEC選定IBM拡張文字は、IBM拡張文字のコードポイントに集約してからの変換になります。また、cp51932 で NEC選定IBM拡張文字の領域には、eucJP-open は、ユーザー定義文字の領域となっているので注意が必要です。
ちなみに、eucJP-open は、ユーザー定義文字を扱えますが、cp51932 はユーザー定義を扱えません。
という具体に、日本語EUCで機種依存文字を扱うのは、非常にややこしく、また各ソフトウェアでの実装が微妙に違ったりするので、日本語EUCで機種依存文字を取り扱うのは、リスクが伴うことを覚悟してください。
ソフトウェアの対応も、まちまちでなおかつ中途半端な実装が多いので、機種依存文字を扱うのであれば、日本語EUCは、極力使わない方向でプログラミングするか、使用するソフトの変換を事前に調べ上げてから、不具合があれば修正するなどして使う必要があるとく思います。
CP932(Windows-31J,MS932) 以上に、日本語EUCでのWindowsの機種依存文字の扱いは混沌としています。
No.150 | 投稿日時: | 2004/03/16(火) 02:21 <↑親記事:No.148> |
投稿者: | 森山 将之 |
Text::Iconv モジュールを使うという方法もあったりします。
No.148 | 投稿日時: | 2004/03/11(木) 12:31 <親記事> |
投稿者: | ひろせ |
CPANなどざっと探して見つからなかったのですが、eucJP-msのperlでの実装を知らないでしょうか?
No.149 | 投稿日時: | 2004/03/16(火) 02:11 <↑親記事:No.148> |
投稿者: | 森山 将之 |
Encode.pm 用の eucJP-ms の実装を考えていた時期もあるのですが、結局、実装せずにずるずると来てしまいました。
cp51932 も実装しないと、たぶんダメだと思うんですが…
基本的には、Windows の機種依存文字は、Windows-31J(cp932) で扱うのが安全なんで、余計なものを作って、eucJP-ms と cp51932 の違いを知らずにハマッてしまう人を出さない方がいいのかなと消極的に考えてみたり…
No.151 | 投稿日時: | 2004/03/17(水) 08:55 <↑親記事:No.149> |
投稿者: | ひろせ |
Jcodeでh2zやtrを使いたいといった要望がLingua::JA::Regularをはじめ、それなりにあると思います。しかしJcode-0.83ではIBM拡張文字をeucにすると正しいsjisのコードポイントに戻らなくなってしまうのでcp932な文字列にはこれらの処理ができません。
そこでJcodeを弄っているところで、cp932 <-> eucjp-msの変換はなんとなくできるようになりました。まだリリースできるレベルではないのですが、お伺いをたてる意味でとりあえずMLにパッチを送ってみようかなぁと思ってるところです。
# まぁPerl 5.8のEncodeや森山さんのパッチがとりこまれたiconvが普及するまでのつなぎなんですが。
No.152 | 投稿日時: | 2004/03/18(木) 01:56 <↑親記事:No.151> |
投稿者: | 森山 将之 |
日本語EUC で Windows の機種依存文字を扱うためのエンコーディングは私が知っているのだけで、次の 2 種類が存在します。
・Windows Code Page 51932
・eucJP-open (Unicode 経由で cp932 との相互変換を実現する場合は eucJP-ms)
Windows Code Page 51932 (以後、cp51932 とします) という Windows で使用されている日本語EUCは、IBM拡張文字のコードポイントをNEC選定IBM拡張文字やNEC特殊文字、JIS文字のコードポイントに集約してから、計算により EUC に変換しています。
EUC から CP932 への変換で注意すべき点としては、計算で CP932 に変換した後に、NEC選定IBM拡張文字のコードポイントを IBM拡張文字とJIS文字のコードポイントに置換する必要がありますので、ご注意ください。
eucJP-open は、JIS X 0212 で定義されている文字に関しては、JIS X 0212 のコードポイントを使用しますので、IBM拡張文字を JIS X 0212 や JIS X 0212 の空き領域にマッピングするたのマッピングテーブルが必要になってきます。
NEC選定IBM拡張文字は、IBM拡張文字のコードポイントに集約してからの変換になります。また、cp51932 で NEC選定IBM拡張文字の領域には、eucJP-open は、ユーザー定義文字の領域となっているので注意が必要です。
ちなみに、eucJP-open は、ユーザー定義文字を扱えますが、cp51932 はユーザー定義を扱えません。
という具体に、日本語EUCで機種依存文字を扱うのは、非常にややこしく、また各ソフトウェアでの実装が微妙に違ったりするので、日本語EUCで機種依存文字を取り扱うのは、リスクが伴うことを覚悟してください。
ソフトウェアの対応も、まちまちでなおかつ中途半端な実装が多いので、機種依存文字を扱うのであれば、日本語EUCは、極力使わない方向でプログラミングするか、使用するソフトの変換を事前に調べ上げてから、不具合があれば修正するなどして使う必要があるとく思います。
CP932(Windows-31J,MS932) 以上に、日本語EUCでのWindowsの機種依存文字の扱いは混沌としています。
No.150 | 投稿日時: | 2004/03/16(火) 02:21 <↑親記事:No.148> |
投稿者: | 森山 将之 |
Text::Iconv モジュールを使うという方法もあったりします。