Программирование: CharLength

Прототип

function CharLength(const S: String; const Index: Integer): Integer;

Описание

Возвращает длину в байтах (1 или 2) символа в указанной строке S по заданному индексу Index.

Комментарии

В двухбайтовых наборах символов (китайский, японский, корейский) большинство символов, отличных от ASCII, занимают два байта. Обратите внимание, что второй байт двухбайтового символа, называемый "младшим байтом", может находиться в том же диапазоне, который используется символами ASCII (ниже 128). Таким образом, при переходе по строке, которая может содержать двухбайтовые символы, такие как путь или имя файла, необходимо принять меры, чтобы ошибочно не принимать младшие байты за однобайтовые символы ASCII.

Пример

function BackslashToSlash(const S: String): String;
var
  I: Integer;
begin
  Result := S;
  I := 1;
  while I <= Length(Result) do
  begin
    if Result[I] = '\' then
      Result[I] := '/';
    // Переходим к следующему символу, но I увеличиваем не просто на 1,
    // а на значение CharLength(), в зависимости от символа Result[I].
    I := I + CharLength(Result, I);
  end;
end;

...

begin
  // Показываем путь, в котором обратная косая черта изменена на прямую.
  MsgBox(BackslashToSlash(ExpandConstant('{cf}')), mbInformation, MB_OK);
end;