在Delphi 7中使用Unicode字符串

Tof*_*nov 7 delphi string unicode internationalization

我需要编写一个程序,它将浏览各种长度的字符串,并只选择那些使用我定义的集合中的符号(特别是日文字母)编写的程序.字符串将包含用不同语言(德语,法语,阿拉伯语,俄语,英语等)编写的单词.显然有大量可能的角色.我不知道使用哪种结构?我现在正在使用Delphi 7.任何人都可以建议如何编写这样的程序?

War*_* P 12

显然,使用Delphi 2010会更好,因为delphi 7中的VCL不知道Unicode字符串.您可以在Delphi 7中使用WideString类型和WideChar类型,并且可以安装类似TNT Unicode组件的组件集来帮助您创建可以显示结果的用户界面.

对于非常大的集合类型,请考虑使用类似TBits的位数组.长度为65536的位数组将足以包含每个UTF-16代码点.检查Char X是否在Set Y中,基本上是:

function WideCharsInSet( wcstr:WideString; wcset:TBits):Boolean;
var
 n:Integer;
 wc:WideChar;
begin
result := false;
for n := 1 to Length(wcstr) do begin
  wc := wcstr[n];
  if wcset[Ord(wc)] then
      result := true;
end;
end;

procedure Demo;
var
 wcset1:TBits;
 s:WideString;
begin
 wcset1 := TBits.Create;
 try
  // 1157 - Hangul Korean codepoint I found with Char Map
    wcset1[1157] := true;         
    // go get a string value s:
    s := WideChar(1157);
// return true if at least one element in set wcset is found in string s:
    if WideCharsInSet(s,wcset1) then begin
        Application.MessageBox('Found it','found it',MB_OK);
    end;

 finally
  wcset1.Free;
 end;

end;
Run Code Online (Sandbox Code Playgroud)

  • Delphi 2010在这里确实差别很小.海报希望以非常简单的级别处理字符串.调用整个支持Unicode的框架的帮助只是为了获得对少数几个函数的访问以及一些封装所需的Unicode Windows API函数的类是过度的.我怀疑所有海报确实需要的是JEDI JCL提供的Unicode支持单元. (3认同)

Uwe*_*abe 5

我还建议切换到Delphi 2010(为什么还要担心2009年了?)!

如果您不熟悉Delphi 7 ,Mike Lischke 的Unicode库可能会有所帮助.


Del*_*ics 5

对于以您描述的方式对字符串进行简单处理,不要因为您应该升级到最新的编译器和启用Unicode的框架而提出建议.Unicode支持本身当然是由底层Windows API提供的,当然(直接)可以从"非Unicode"版本的Delphi访问,就像"Unicode版本"一样.

我怀疑,您可以从JEDI JCL中提供的Unicode支持获得大多数(如果不是全部)针对您的问题中列出的目的所需的Unicode支持.

对于任何视觉组件支持,您可能需要TNT控制集具有免费的吸引力.