Преобразование кодовой страницы

На верх  Назад  Вперёд

Так как строки имеют информацию о кодовой странице, связанную с ними, важно знать, в какой кодовой странице используется данная строка:

1.Короткие строки (ShortString) всегда используют системную кодовую страницу (по умолчанию).

2.AnsiStrings использует системную кодовую страницу (по умолчанию).

3.Одиночные байтовые строки объявляются с текущей кодовой страницей.

4.Тип RawByteString не имеет информации о кодовой странице, связанной с ним.

Компилятор преобразует кодовую страницу нужным образом: При присвоении строки, кодовая страница исходной строки всегда будет преобразовываться в кодовую страницу результирующей строки.

Это означает, что в следующем коде:

Type

TString1 = Type String(1252);

TString2 = Type String(1251);

Var

A : TString1;

B : TString2;

begin

A:='123'+'345'+intToStr(123);

B:=A;

Writeln('B : ',StringRefCount(B));

Writeln('A : ',StringRefCount(A));

end.

Компилятор преобразует содержимое строки B в соответствии с кодовой страницей строки A. Обратите внимание, что если происходит преобразование кодовой страницы, то не используется механизм счетчика ссылок: для новой строки будет выделена память.

Автоматизированное преобразование кодовых страниц может серьезно замедлить код, поэтому необходимо соблюдать осторожность, чтобы преобразования кодовых страниц было сведено к минимуму.

Кодовую страницу строки можно задать явно с помощью процедуру SetCodePage модуля System. Вызов этой процедуры будет преобразовывать значение строки к запрашиваемой кодовой страницы.

Примечание:

Преобразование кодовой страницы может привести к потере данных: если в результирующей кодовой странице нет нужного символа (символ не определён).

Примечание:

Поддержка кодовой страницы требует некоторые вспомогательные процедуры, они реализованы в менеджере UnicodeString. В Windows для этого используются системные процедуры. В Unices, используется модуль cwString для установления связи с библиотекой C и использует её поддержку и её функции преобразования. В качестве альтернативы, можно использовать модуль fpWideString который содержит менеджер UnicodeString реализованный в Object Pascal.