Прежде всего, я рекомендую вам прочитать Технический документ Марко Канто по Unicode в Delphi .Из вашего вопроса (и предыдущих вопросов) я также предполагаю, что вы используете версию Delphi для Unicode, то есть D2009 или более позднюю.
Прежде всего вы можете определить AnsiString с кодовой страницей 1251 для соответствияВаши входные данные.
type
CyrillicString = type Ansistring(1251);
Это важный шаг.В нем говорится, что любые данные, содержащиеся в переменной этого типа, должны интерпретироваться как закодированные с использованием кодовой страницы 1251.Это позволяет Delphi выполнять правильные преобразования в другие типы строк, как мы увидим позже.
Далее скопируйте ваши входные данные в строку этой переменной.
function GetCyrillicString(const Input: array of Byte): CyrillicString;
begin
SetLength(Result, Length(Input));
if Length(Result)>0 then
Move(Input[0], Result[1], Length(Input));
end;
Конечно, можетдругие, более удобные способы ввода данных. Возможно, они поступают из потока.В любом случае, убедитесь, что вы делаете это с чем-то эквивалентным копии памяти, чтобы не вызывать преобразования кодовых страниц и, таким образом, потерять кодировку 1251.
Наконец, вы можете просто присвоить CyrillicString
дляобычная переменная Unicode string
, и среда выполнения Delphi выполняет необходимое преобразование автоматически.
function ConvertCyrillicToUnicode(const Input: array of Byte): string;
begin
Result := GetCyrillicString(Input);
end;
Среда выполнения может выполнить это преобразование, поскольку вы указали кодовую страницу при определении CyrillicString
и поскольку string
отображается наUnicodeString
кодируется UTF-16.