VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -