ホーム >プログラム >Delphi 6 ローテクTips >文字列中にUnicode文字があるかを返す関数

文字列中にウムラウトのようなUnicode文字があるかを返す関数。


const
  WC_NO_BEST_FIT_CHARS = $400;


function gfnbIsUnicode(sSrc: WideString): Boolean;
{
sSrcにウムラウトのようなUnicode文字があればTrueを返す。
http://yokohama.cool.ne.jp/chokuto/urawaza/api/WideCharToMultiByte.html
0x00000400 (WC_NO_BEST_FIT_CHARS)
Windows 2000/XP:直接マルチバイト文字に変換できない文字をデフォルトキャラクタに置きかえます。
}
var
  lb_Bool: LongBool;
begin
  WideCharToMultiByte(CP_ACP, WC_NO_BEST_FIT_CHARS, PWideChar(sSrc), -1, nil, 0, nil, @lb_Bool);
  Result := lb_Bool;
end;

「直接マルチバイト文字に変換できない文字」というのはUnicodeなら正しく表示できるけれども、Shift-JISだと代替文字に変えられたり「?」に変わったりしてしまう文字のことで、ウムラウト(ü)のような文字とかハートマーク(♥)のような記号などもそれに該当します。


2009-02-12:
  lb_Bool利用に変更。LongBoolのアドレスをを渡さないとエラーになることがあるため。