特殊文字 (スペシャルキャラクター)
アスパラフィルターは外国語判別処理をしています。
もちろん、件名や差出人がISO-2022-JPやISO-8859-*でエンコードされていれば
簡単なのですけど・・
エンコードされていないときでも外国語判別処理を行えるようになってます。
特殊文字を調べたときの情報を少しだけまとめてみました。
□ スペイン語の特殊文字とASCIIコード
| 特殊文字 | 使用してる単語など | ASCIIコード | HTMLコード |
| ñ | español (スペインの) señorita (お嬢さん) | 0xF1 | ñ |
| Ñ | 0xD1 | Ñ |
| á | champán (シャンパン) fábrica (工場) rápido (速い) | 0xE1 | á |
| Á | 0xC1 | Á |
| í | Sí (Yes) esquí (スキー) compañía (会社) | 0xED | í |
| Í | 0xCD | Í |
| ú | fútbol (フットボール) música (音楽) último (最新の) | 0xFA | ú |
| Ú | 0xDA | Ú |
| é | café (カフェ) teléfono (電話) | 0xE9 | é |
| É | 0xC9 | É |
| ó | Adiós( Good-bye) estación (駅) ópera (オペラ) | 0xF3 | ó |
| Ó | 0xD3 | Ó |
| ¿ | ¿ Perdón ? (Excuse me) | 0xBF | ¿ |
| ¡ | ¡ Hola ! (Hi) | 0xA1 | ¡ |
□ スペイン語特殊文字とシフトJIS
| スペイン語特殊文字 | シフトJIS |
シングルバイト
0x80〜0xFFの部分の一部 上記ASCIIコード参照 | マルチバイト
第1バイトの範囲 0x81〜0x9F, 0xE0〜0xEF
第2バイトの範囲 0x40〜0x7E, 0x80〜0xFC
|
téléphoneという単語は日本語環境では、次のように表示されます。
t駘駱hone
これは、é(0xE9)がシフトJISの第1バイトで、
それに続く l(0x6C)や e(0x70)がシフトJIS第2バイトだからです。
él(0xE9 0x6C) → 駘
ép(0xE9 0x70) → 駱
スペイン語のASCIIコードがシフトJISの第1バイトと同じものはéの他に、
á(0xE1)とí(0xED)があります。
0xE1(á) 0xE9(é) 0xED(í)のいずれかで始まり、
それに続くバイトが0x40〜0x7E, 0x80〜0xFCのときシフトJISと判断され漢字で表示され
てしまいます。
ここで例にあげた「t駘駱hone」は英字とシフトJISが混在した文字列です。
これは「SPAMメール」や「F1グランプリ」「B5ノート」といった単語と同類ということです。
シフトJISなら日本語という単純な判別処理を行なうと・・
スペイン語の文字化けを含め全て日本語と判別してしまうことになります。
□ 良く見かける é
スペイン語は詳しくありませんが、いろいろとテストしていてéを含む単語は多いように
感じました。またこのéはスペイン語のほかにフランス語、ポルトガル語などでも使われます。
(良く見るといっても é を直接見るわけではなく、
バイナリーレベルでE9を良く見るということです。)
以下に、このéと英字小文字を組み合わせた漢字を表示してみました。
ヨーロッパ言語が文字化けしたときに良く見るような漢字が並んでいると思います。
éと英字小文字の組み合わせ(a〜z順に26文字並んでいます。)
饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷
実際にはéx, ézという綴りはないように思うので、
良く現れる文字は限られてくると思います。
化けて出やすい文字:
éc(馗)、éo(駮)、ía(a)
英字のASCIIコードは、A-Z(0x41-0x5A), a-z(0x61-0x7A)です。
.(0x2E),(0x2C)?(0x3F) (0x20)
□ スペイン語判別を行うにあたって
実際にスペイン語を判別する場合、ヨーロッパ圏で使われる記号に対する配慮も必要です。
のようなダブルクォートもそうですし、
ユーロ()やポンド(£)などといった記号もそうです。
áíéに英字大文字が続くことも考えにくいです。英字小文字との組み合わせや、
文末の'.','?',','やスペース' 'などとの組み合わせが考えられます。
「特殊文字の直後に特殊文字が続くことはないのでは?」っと思って調べてみましたが、
特殊文字が連続する単語も存在するようです。
スペイン語特殊文字が連続する単語
例) compañía
特殊文字が連続する単語が存在しなければ、判別アルゴリズムもより簡単になるのですが・・
甘い考えでした。
□ 最後に
何故最初にスペイン語を選んだかというと、スペイン語を使用している国が多いからです。(=使用人口も多い)
(アルゼンチン、ウルグアイ、エクアドル、エルサルバドル、キューバ、グアテマラ、コスタリカ、コロンビア、スペイン、赤道ギニア、チリ、ドミニカ共和国、ニカラグア、パナマ、パラグアイ、ベネズエラ、ペルー、ボリビア、ホンジュラス、メキシコ)
言語別インターネット人口を扱っているホームページを見つけました。
図録▽世界の言語別インターネット人口
言語別インターネット人口では、英語、中国語、日本語、スペイン語・・となっています。
これはスパム送信国の言語比率と関係があるかもしれません。
覚え書き
□ フランス語の特殊文字とASCIIコード
| 特殊文字 | 使用してる単語など | ASCIIコード | HTMLコード |
| â | - | 0xE2 | â |
| Â | 0xC2 | Â |
| î | - | 0xEE | î |
| Î | 0xCE | Î |
| û | - | 0xFB | û |
| Û | 0xDB | Û |
| ê | - | 0xEA | ê |
| Ê | 0xCA | Ê |
| ô | - | 0xF4 | ô |
| Ô | 0xD4 | Ô |
| à | - | 0xE0 | à |
| À | 0xC0 | À |
| ù | - | 0xF9 | ù |
| Ù | 0xD9 | Ù |
| è | - | 0xE8 | è |
| È | 0xC8 | È |
| é | - | 0xE9 | é |
| É | 0xC9 | É |
| ç | - | 0xE7 | ç |
| Ç | 0xC7 | Ç |
| ë | - | 0xEB | ë |
| Ë | 0xCB | Ë |
| ï | - | 0xEF | ï |
| Ï | 0xCF | Ï |
| ü | - | 0xFC | ü |
| Ü | 0xDC | Ü |
| | - | 0x9C | œ |
| | - | 0x8C | Œ |
□ ポルトガル語の特殊文字とASCIIコード
wiki ポルトガル語のアルファベットを参考に
| 特殊文字 | 使用してる単語など | ASCIIコード | HTMLコード |
| á | - | 0xE1 | á |
| Á | 0xC1 | Á |
| í | - | 0xED | í |
| Í | 0xCD | Í |
| ú | - | 0xFA | ú |
| Ú | 0xDA | Ú |
| é | - | 0xE9 | é |
| É | 0xC9 | É |
| ó | - | 0xF3 | ó |
| Ó | 0xD3 | Ó |
| â | - | 0xE2 | â |
| Â | 0xC2 | Â |
| ê | - | 0xEA | ê |
| Ê | 0xCA | Ê |
| ô | - | 0xF4 | ô |
| Ô | 0xD4 | Ô |
| ã | - | 0xE3 | ã |
| Ã | 0xC3 | Ã |
| õ | - | 0xF5 | õ |
| Õ | 0xD5 | Õ |
| à | - | 0xE0 | à |
| À | 0xC0 | À |
| ü | - | 0xFC | ü |
| Ü | 0xDC | Ü |
| ç | - | 0xE7 | ç |
| Ç | 0xC7 | Ç |
□ ドイツ語の特殊文字とASCIIコード
特殊文字は、a, u, oのウムラウトとエスツェット(ß)のみ。
| 特殊文字 | 使用してる単語など | ASCIIコード | HTMLコード |
| ä | - | 0xE4 | ä |
| Ä | 0xC4 | Ä |
| ü | - | 0xFC | ü |
| Ü | 0xDC | Ü |
| ö | - | 0xF6 | ö |
| Ö | 0xD6 | Ö |
| ß | - | 0xDF | ß |