Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
全角と半角を判別したい
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30839#CommentId85625
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
るきお
 (社会人)
投稿日時
2023/1/26 20:36:18
ごめんなさい。投稿いただいたプログラムから、どのような処理なのか読み取れませんでした。
投稿いただいたプログラムを見ると、たとえば、student_nameが"あいう"の場合、w_fullnameは""になり、student_nameが"アイウ"の場合は"???"になるように見えます。これは想定された動作ででしょうか?
というわけで全体的にはわからないのですが、半角判断についてはこの部分のようですね。
If AscB(Left(chg_kana_name, 1)) >= &HA0 Or AscB(Left(chg_kana_name, 1)) <= &H1F Then
これは、あまり良いプログラムではありませんが、意図は想像できます。
chg_kana_nameの1文字目をASCIIコードに置き換えた場合、A0 以上または 1F以下であれば半角と判断する意図のように見えます。
ASCIIコード(を日本語仕様で使う場合)では半角のアがB1,イがB2…ンがDDというように文字コードが割り当てられています。句読点や濁点などもあるので、A1~DFが一般的にいう半角カタカナです。
http://www.isc.meiji.ac.jp/~re00108/ch11/asciicode.html
A0以上または1F以下という範囲だと、これより範囲が広いので一般的には不適切な範囲だと思いますが、変数student_nameが改行以外のキーボードから入力できるASCII文字で構成されると前提であればいわゆる半角カタカナの範囲に合致します。
(たとえば、student_nameに漢字が入っていることがあるのであれば前提と異なります。)
ご質問では単に「半角」と表現されていますが、アルファベットの ABC などはここでは条件に合致しないようなので、問題となるのはいわゆる「半角カタカナ」のようですね。
「半角」や「全角」の定義は使う人によって異なっている場合があり、現在(2023年)安全なところではShift_JISで表現した場合に1バイトになる文字が半角文字、それ以外は全角文字というところだと思います。
半角文字は数が多くないので文字を決め打ちして判断してしまう方法もあります。
ヤマダさんが考えられたプログラムの方では、"Unicode"を使っているので、いわゆる文字コードは UTF-16 になります。これは ASCII とも Shift_JIS とも異なる文字コードです。(正確にはUTF-16はエンコーディング方式の名前でこれを「文字コード」というのは不正確です。)
だから、A0 以上 または 1F 以下という範囲ではいわゆる半角カタカナは判定できません。
UTF-16でいわゆる半角カタカナの文字コードは下記資料に記載されています。
https://www.unicode.org/charts/PDF/UFF00.pdf
アは FF71 、イは FF72, ンが FF9D です。
バイト型の配列 Byte() で表現すると、それぞれ FF, 71 と FF, 72 と FF, 9D です。
ですから、 test(0) のように先頭の1バイトだけを取り出すとどの文字も FF です。
FF は 10進数では 255 になります。
> 半角の場合はtest()のindex1の値は必ず255になるのでしょうか?
以上の通りなので、いわゆる半角カタカナをUTF-16で表現すると最初の1バイト目は必ず 255 になります。
Shift_JIS や 他の文字コード・エンコーディング方式の場合はそうとは限りません。