秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  278 随笔 :: 0 文章 :: 308 评论 :: 20万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
之前写过一个类似的,不过没严格按照UTF8编码规则判断。参考网上C代码,重新写一个符合UTF8编码规则的IsStringUTF8函数。
调用方法:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsStringUTF8(edit1.Text)  then
     memo1.Lines.Add(edit1.Text+'--包含中文')
  else
     memo1.Lines.Add(edit1.Text+'--包含不中文');
end;

 IsStringUTF8函数:

复制代码
function IsStringUTF8(strtmp: string): Boolean;
var
  nBytes: byte;
  chr: byte;
  bAllAscii: Boolean;
  i: Integer;
begin
  nBytes := 0;
  bAllAscii := TRUE;
  for i := 1 to length(strtmp) do
  begin
    chr := ord(strtmp[i]);
    if (chr and $80) <> 0 then
      bAllAscii := FALSE;

    if nBytes = 0 then
    begin
      if chr >= $80 then
      begin
        if chr >= $FC then
          nBytes := 6
        else if chr >= $F8 then
          nBytes := 5
        else if chr >= $F0 then
          nBytes := 4
        else if chr >= $E0 then
          nBytes := 3
        else if chr >= $C0 then
          nBytes := 2
        else
          Exit(FALSE);

        Dec(nBytes);
      end;
    end
    else
    begin
      if (chr and $C0) <> $80 then
        Exit(FALSE);

      Dec(nBytes);
    end;
  end;

  if nBytes > 0 then
    Exit(FALSE);

  if bAllAscii then
    Exit(FALSE);

  Result := TRUE;
end;
复制代码

 

posted on   秋·风  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2021-10-13 Lazarus Linux 创建菜单及桌面快捷方式
点击右上角即可分享
微信分享提示