[リストへもどる]
一括表示

投稿時間:2002/12/24(Tue) 14:47
投稿者名:yama
URL :
タイトル:
文字コード関係で困っています
初めましてyamaと申します。
現在、VB6で文字コードチェックプログラムを作っているのですが
なにせやったことのない領域なのでどうすればいいのか検討もつかないのです

やりたい事は
@指定文字列が半角か全角かのチェック
A指定文字列に登録外字以外の外字が入ってるかのチェック
B指定文字列がユニコードかどうかのチェック
です。
今まで文字コード系は作った事も知識もなくて困っています

よろしくご教授ください。

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