投稿時間: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です。
|