Преобразование Юникода (Unicode)

<< Нажмите, чтобы показать Содержание >>

Преобразование Юникода (Unicode)

Различные функции для работы с Юникодом.

Модуль [VCL / FMX] RVUni / fmxRVUni.

type

  TRVCodePage = type cardinal; // defined in RVStyle unit

function RVU_AnsiToUnicode(CodePage: TRVCodePage;

  const s: TRVAnsiString): TRVUnicodeString;

function RVU_UnicodeToAnsi(CodePage: TRVCodePage;

  const s: TRVUnicodeString): TRVAnsiString;

function RVU_AnsiToUTF8(CodePage: TRVCodePage;

  const s: TRVAnsiString): TRVRawByteString;

RVU_AnsiToUnicode преобразует ANSI-строку в указанной кодовой странице (CodePage) в юникодную строку (UTF-16).

RVU_UnicodeToAnsi преобразует юникодную строку (UTF-16) в ANSI-строку в указанной кодовой странице.

RVU_AnsiToUTF8 преобразует ANSI-строку в указанной кодовой странице в строку UTF-8.

type

  TRVUnicodeTestResult = (rvutNo, rvutYes, rvutProbably, rvutEmpty,

   rvutError);

function RV_TestStreamUnicode(Stream: TStream): TRVUnicodeTestResult;

function RV_TestFileUnicode(

  const FileName: String): TRVUnicodeTestResult;

function RV_TestStringUnicode(

  const s: TRVRawByteString): TRVUnicodeTestResult;

Эти функции выполняют очень простую проверку содержимого потока, файла или строки, чтобы определить, содержит ли оно текст в Юникоде (UTF-16) или ANSI.

Возможные результаты:

rvutNo – текст в ANSI;

rvutYes – скорее всего, текст в Юникоде;

rvutProbably – текст может быть как в ANSI, так и в Юникоде;

rvutEmpty – содержимое пусто;

rvutError – ошибка при чтении файла или потока.

Сначала функции проверяют количество байтов в содержимом. Если оно нечётное, текст не является Юникодом (rvutNo).

Затем проверяются первые 2 байта текста. Если они содержат маркер порядка байтов Юникодов (BOM), текст с очень высокой вероятностью является юникодным (rvutYes).

После этого проверяется наличие нулевых байтов среди первых 500 байтов. Если они есть, текст считается не-ANSI (rvutYes); если нет, текст может быть как ANSI, так и Юникодным (rvutProbably).

Для более сложной проверки можно также использовать функцию WinAPI IsTextUnicode.

См. также:

Юникод в ТРВ-Редакторе.