掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WideCharが半角か全角か判断したい (ID:21509)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
なるほど、そういうアプローチもあるわけですね。 文字幅を微妙なところまで考え出すと非常に複雑ですね..... 大変勉強になりました。ありがとうございます。 ヒントいただきましていろいろ探して Unicode対応 文字コード表 http://ash.jp/code/unitbl1.htm を参考にみて、 次の関数を作って望みのものができました。 Delphiでは 『\』の扱いは参考のページとは違って $005C として表現されるようです。 『~』は参考ページ通り $203E でした。 type TWideCharByteLength = (wcblSingle, wcblMulti); function WideCharByteLength(source: WideChar): TWideCharByteLength; var Buffer: word; begin Buffer := Ord(source); case Buffer of $0020..$007F, $203E, $FF61..$FF9F: begin Result := wcblSingle; end; else begin Result := wcblMulti; end; end; end; ファーストテストコードは次のようになります。 (カタカナや記号は全部半角) procedure Check(A, B: Variant); overload; begin if not(A = B ) then begin Assert(False, 'エラーです'); end; end; procedure testWideCharByteLength; begin Check(wcblSingle, WideCharByteLength(WideChar(WideString('a')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('g')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('z')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('A')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('G')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('Z')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('\')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('[')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString(']')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('^')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('`')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('_')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('~')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('{')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('|')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('}')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('。')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('「')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('」')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('、')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('・')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヲ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ァ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ィ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ゥ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ェ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ォ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ャ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ュ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ョ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ッ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ー')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ア')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('イ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ウ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('エ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('オ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('カ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('キ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ク')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ケ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('コ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('サ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('シ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ス')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('セ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ソ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('タ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('チ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ツ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('テ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ト')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ナ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ニ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヌ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ネ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ノ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ハ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヒ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('フ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヘ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ホ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('マ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ミ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ム')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('メ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('モ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヤ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ユ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ヨ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ラ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('リ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ル')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('レ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ロ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ワ')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('ン')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('゛')[1]))); Check(wcblSingle, WideCharByteLength(WideChar(WideString('゜')[1]))); Check(wcblMulti, WideCharByteLength(WideChar(WideString('a')[1]))); Check(wcblMulti, WideCharByteLength(WideChar(WideString('A')[1]))); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.