投稿日 | : 2002/12/24(Tue) 19:28 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re: 文字コード関係で困っています |
> (1)指定文字列が半角か全角かのチェック
文字コードによって、全角半角の定義は異なります。
例えばアルファ(α)の文字幅は、Shift_JISでは全角として扱われますが、
Unicodeでは、文脈依存(全角として扱われる場合と半角となる場合がある)です。
> (2)指定文字列に登録外字以外の外字が入ってるかのチェック
その文字列の文字コードがわかるのであれば、1文字ずつチェックしていく事で判定できます。
例えばShift_JISならF040〜F9FCの範囲にある文字、Unicodeでは、
U+E000〜U+F8FFの範囲が、私用文字領域として定義されています。
なお、文字コードの自動判定というのは、かなり大変な作業なので、
あらかじめ、どの文字コードが利用されているのかを調べておいて下さい。
# 例えば、B0 BE A4 C8 B0 B3 というバイトデータの並びは、
# JIS X 0208/1978 日本語EUC では、「鮎と鰺」
# JIS X 0208/1997 日本語EUC では、「鮎と鯵」
# Shift_JIS では、(半角カナで)「ーセ、ネーウ」
# となります。この場合、人間ならば「Shift_JISではない」と推定できますが、
# その判断をプログラム的に行わせるのは、面倒な作業となるでしょう。
> (3)指定文字列がユニコードかどうかのチェック
一口にUnicodeと言っても、その符号化形式にはいくつかありますが、とりあえず、
「FE FF」が文字列の先頭に埋め込まれている場合は、Unicodeと考えて良いでしょう。
# FEFFの文字は、ZERO WIDTH NO-BREAK SPACE、もしくはBOM(バイト順マーク)と呼ばれます。
具体的には、文字列の先頭に対して、以下のようなBOMが定義されています。
00 00 FE FF なら、ビッグエンディアンのUCS-4
FF FE 00 00 なら、リトルエンディアンのUCS-4
EF BB BF なら、UTF-8
FE FF なら、ビッグエンディアンのUCS-2/UTF-16
FF FE なら、リトルエンディアンのUGS-2/UTF-16
ただしUnicodeといっても、先頭にBOMが付かない場合もありますので、
その場合は文字列の内容を見て、自力で判断するしか無いでしょう。
# なお、VB(というかWindows)が一般的に利用するUnicodeテキスト形式は、
# リトルエンディアンなUTF-16です。