Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как конвертировать WideString в String

Delphi , Синтаксис , Преобразования

Как конвертировать WideString в String

Автор: http://www.swissdelphicenter.ch

{
Converts Unicode string to Ansi string using specified code page.
  @param   ws       Unicode string.
  @param   codePage Code page to be used in conversion.
  @returns Converted ansi string.
}


function WideStringToString(const ws: WideString; codePage: Word): AnsiString;
var
  l: integer;
begin
  if ws = '' then
    Result := ''
else
  begin
    l := WideCharToMultiByte(codePage,
      WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
      @ws[1], -1, nil, 0, nil, nil);
    SetLength(Result, l - 1);
    if l > 1 then
      WideCharToMultiByte(codePage,
        WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
        @ws[1], -1, @Result[1], l - 1, nil, nil);
  end;
end; { WideStringToString }

{:Converts Ansi string to Unicode string using specified code page.
  @param   s        Ansi string.
  @param   codePage Code page to be used in conversion.
  @returns Converted wide string.
 }

function StringToWideString(const s: AnsiString; codePage: Word): WideString;
var
  l: integer;
begin
  if s = '' then
    Result := ''
else
  begin
    l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), -1, nil,
      0);
    SetLength(Result, l - 1);
    if l > 1 then
      MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]),
        -1, PWideChar(@Result[1]), l - 1);
  end;
end; { StringToWideString }

Приведенный код на Delphi содержит две функции: WideStringToString и StringToWideString. Эти функции могут использоваться для конвертации между типами данных WideString (Юникод) и AnsiString (ANSI) в Delphi.

Почему Конвертировать? В Delphi тип WideString используется для Юникод-строк, а тип AnsiString - для ANSI-строк. Эти два типа имеют разные кодировки символов и не являются прямой совместимостью друг с другом. Функции, предоставленные в этом примере, позволяют конвертировать между этими двумя типами при необходимости.

Как Использовать Для использования этих функций просто передайте значение WideString или AnsiString как первый аргумент, вместе с кодовой страницей для конвертации (значение типа Word). Например:

ws: WideString;
s: AnsiString;

// Конвертировать WideString в AnsiString
s := WideStringToString(ws, CP_UTF8);

// Конвертировать AnsiString в WideString
ws := StringToWideString(s, CP_UTF8);

В этом примере функции используют кодовую страницу UTF-8 (CP_UTF8). Вы можете выбрать другую кодовую страницу в зависимости от своих конкретных потребностей.

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

Альтернативное Решение Если вам нужно часто конвертировать между WideString и AnsiString, вы также можете использовать встроенные функции Delphi для этого:

ws: WideString;
s: AnsiString;

// Конвертировать WideString в AnsiString
s := UTF8Encode(ws);

// Конвертировать AnsiString в WideString
ws := UTF8Decode(s);

Функции, предоставленные в этом примере, являются частью единицы System и могут использоваться с Юникод-строками. Они автоматически обрабатывают конвертацию, не требуя указания кодовой страницы.

Помните, что встроенные функции Delphi могут не всегда производить те же результаты, что и custom-функции WideStringToString и StringToWideString, особенно при работе с строками, не закодированными в UTF-8.

В статье описываются функции WideStringToString и StringToWideString для конвертации WideString в String и наоборот, используя указанный кодовый страницы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Преобразования ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 14:23:36/0.0038738250732422/0