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;