機種依存文字が含まれているかどうかチェックするには?


おさる  2009-10-17 19:50:13  No: 142658

こんにちは。VB2008でメール送信機能の付いた顧客管理プログラムを作ろうとしています。
メール送信時、機種依存文字が含まれないようにチェックをかけたいのですが、
どのようにして機種依存文字を検出すればよいでしょうか?
すでにそのようなメソッドを持つクラスが用意されているのか、それとも自分で文字コードのマッピングを作らなければならないのか、
お教えいただけないでしょうか?
もし自分でマッピングが必要な場合、どの範囲がいわゆる機種依存文字なのかもお教えいただけるとありがたいです。
宜しくお願いします。


YuO  2009-10-17 22:05:45  No: 142659

機種依存文字とは何かをちゃんと定義してください。
定義されていないものは検出できません。


Koz  2009-10-18 10:06:16  No: 142660

メール送信ってことなので、SMTP は7ビットのコードしか
通らないので、8ビット目が ON になっていたら、機種依存文字と
判断していいのではないかと思います。

漢字の場合は JIS コードに変換して上位8ビット目をチェック、
ということになるかと。


おさる  2009-10-18 21:57:00  No: 142661

言葉足らずで申し訳ありません。
例えば、Shift_JISを考えると、例えば、丸文字の1などは、WindowsとMacでは割り当てられたコードが違い、
文字化けを起こす原因になるようですが、今回の質問の背景で想定されるケースでは、
・VBのフォーム上のテキストボックスにメールの本文等を入力する。
・入力された文字をJIS(iso-2022-jp)に変換し、メール送信する。
ですので、入力テキストボックスの文字コード(これはUTF-8?)からJIS(iso-2022-jp)に変換してメール送信した場合、
Macユーザ側で文字化けする文字があるかどうかを知りたいのです。
(もしあるならばこれが当方の定義する機種依存文字です。)
Shift_JISのコードは考慮していないので、上記方法で丸文字の1を含むテキストを上記方法で変換した場合、
Macでメールを受信しても文字化けは起こらないのではないかとも思うのですが、当方Macを持っていませんので、
この場合の文字化けが起こるのかどうかについては確認できておりません。
また、Windowsで使用できる文字で、Macで使用できない文字についても知りたいです。
宜しくお願いします。


Koz  2009-10-19 09:11:32  No: 142662

うーむ、たしかにSMTPを通るのと表示がうまくいくのとは別ですね。

ためしにコードページ 50220 (iso-2022-jp) で変換したら8ビット目をチェックするだけだと、丸付き数字が通ってしまいました。
 
こんなページを見つけましたがどうでしょう。

文字化け(機種依存文字)
http://www.geocities.co.jp/SiliconValley-SanJose/5148/moji/

下のほうに Windows と MAC の比較表があります。
なんかスパッとやる方法はないものかな・・・


YuO  2009-10-19 10:46:23  No: 142663

> 例えば、Shift_JISを考えると、例えば、丸文字の1などは、WindowsとMacでは割り当てられたコードが違い、

丸囲み数字の1 (U+2460) は,元々Shift_JISには含まれません。
WindowsやMachintoshにおけるShift_JISの拡張には含まれますが。

> ですので、入力テキストボックスの文字コード(これはUTF-8?)からJIS(iso-2022-jp)に変換してメール送信した場合、
> Macユーザ側で文字化けする文字があるかどうかを知りたいのです。

原則は,JIS X 0201またはJIS X 0208に定義されている文字かどうかを調べることになると思います。
UTF-16 => ISO-2022-JPの.NET Frameworkにおける変換表は多対多の関係のはずなので,実際に変換した後,文字コードを調べるのが一番だと思います。
JIS X 0201/0208に含まれる文字は,Unicodeのマッピングデータを調べるのが簡単でしょう。
http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/
JIS X 0201/0208の文字とUnicodeの文字は上記のような対応になっているとは限りませんが,どの文字が含まれるかの調査には使えます。

ちなみに,可能であるならば,メール自体をUTF-8 + Base64 or Quoted-Printableで送れば,この手の問題は発生しません。
# 受信側がUTF-8に対応しているかや,その文字を表示できるかは別問題。

> ためしにコードページ 50220 (iso-2022-jp) で変換したら8ビット目をチェックするだけだと、丸付き数字が通ってしまいました。

ISO-2022-JPはISO-2022の7bit系を元にしているため,すべての値が7bitで表されています。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加