Работа со строками Юникода в Delphi 7

Мне нужно написать программу, которая будет просматривать строки различной длины и выбирать только те, которые написаны с использованием символов из набора, определенного мной (особенно японские буквы). Строки будут содержать слова, написанные на разных языках (немецком, французском, арабском, русском, английском и др.). Очевидно, что существует огромное количество возможных персонажей. Я не знаю, какую структуру использовать для этого? Я использую Delphi 7 прямо сейчас. Кто-нибудь может подсказать, как написать такую программу?

3 ответов


очевидно, вам было бы лучше с Delphi 2010, так как VCL в delphi 7 не знает строк Unicode. В Delphi 7 можно использовать типы WideString и WideChar, а также установить набор компонентов, например компоненты Unicode TNT, чтобы создать пользовательский интерфейс, который может отображать результаты.

для типа очень большого набора рассмотрите возможность использования битового массива, такого как TBits. Битовый массив длины 65536 будет достаточно, чтобы содержать каждую кодовую точку UTF-16. Проверка Char X находится в множестве 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;

для простой обработки строк таким образом, как вы описываете, не откладывайте предложения о том, что вы должны обновить до последней версии компилятора и Unicode enabled framework. Сама поддержка Unicode, конечно, обеспечивается базовым API Windows, который, конечно, (напрямую) доступен из "не-Unicode" версий Delphi так же, как из "Unicode versions".

Я подозреваю, что большинство, если не все поддержки Unicode, которые вам нужны для указанных целей в вашем вопросе можно получить из поддержки Unicode, представленной в джедай JCL.

для любой поддержки визуальных компонентов может потребоваться TNT набор управления призыв быть свободным.


Я также рекомендую переключиться на Delphi 2010 (зачем больше беспокоиться о 2009?)!

Если в маловероятном случае вы застряли с Delphi 7 Библиотека Юникод от Mike Lischke может быть полезно.