如何判断可见字符 Unicode

本文介绍了一种检测Unicode字符串中所有字符是否为可见字符的方法,包括英文字符和GB2312汉字及符号,提供了Delphi语言实现的示例代码。

一个Unicode字符串,如何判断其中都是可见字符?

//根据国标 GB2312 的中文汉字及符号 区位码的范围判断
Function CheckIsGB2312(Char : WideChar) : Boolean;
var
  S : AnsiString;
begin
  S := Char;
  Result := (PByte(integer(S)+1)^>=$A1) and (PByte(integer(S)+1)^<=$FE) and
            (PByte(S)^>=$B0) and (PByte(S)^<=$F7);
end;
 
//检查是否都是可见英文字符或者汉字及符号,全部是返回True否则False,空格认为可见
Function StrIsCanShow(Const WS : WideString) : Boolean;
var
  i : integer;
  P : PWideChar;
begin
  Result := True;
  P := Pointer(WS);
  for i:=1 to Length(WS) do begin
    if not (
             ((PWord(P)^>=$20) and (PWord(P)^<=$7E)) //Ansi 可见字符
             or CheckIsGB2312(P^)                    //GB2312汉字及符号
           ) then  begin
      Result := False;
      Break;
    end;
    Inc(P);
  end;
end;

注意string从来不是widestring,D2009之前string是ansistring, 从D2009开始,string是unicodestring。
unicodestring和widestring虽然都是UTF-16字符串,但不是同一种类型,unicodestring是Delphi原生类型,支持引用计数和代码页,使用Delphi RTL内存管理,

widestring是Windows COM BSTR类型的封装,不支持引用计数和代码页,使用Windows内存管理。

 

https://bbs.csdn.net/topics/370029342

https://bbs.csdn.net/topics/392047346?page=1

转载于:https://www.cnblogs.com/railgunman/p/9931247.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值