Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2015, 22:52   #1
Должно быть имя?
Пользователь
 
Регистрация: 11.04.2015
Сообщений: 68
Злость PAnsiChar utf8 русские буквы ?

Как конвертировать PAnsiChar в PAnsiChar но чтоб urf8 были русскими буковками ?

с PWideChar все понятно а PAnsiChar никак не хочет

Код:
function ZvalStrPAChar;
begin
  Result := '';
  case z._type of
    IS_BOOL, IS_LONG   : Result := PAnsiChar(AnsiString(inttostr(z.value.lval)));
    IS_DOUBLE          : Result := PAnsiChar(AnsiString(FloatToStr(z.value.dval)));
    IS_STRING          : Result := z.value.str.val;
  end;
end;
Должно быть имя? вне форума Ответить с цитированием
Старый 11.04.2015, 22:58   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Что-что? Вопрос непонятен.
Somebody вне форума Ответить с цитированием
Старый 11.04.2015, 23:05   #3
Должно быть имя?
Пользователь
 
Регистрация: 11.04.2015
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Что-что? Вопрос непонятен.
У меня PAnsiChar получает строку в UTF8. И надо как то конвертировать в понятный вид, без кракозябр... На всякий случай приложу пример с PWideChar

Код:
function ZvalStrPWChar;
begin
  Result := '';
  case z._type of
    IS_BOOL, IS_LONG   : Result := StringToOleStr(WideString(inttostr(z.value.lval)));
    IS_DOUBLE          : Result := StringToOleStr(WideString(FloatToStr(z.value.dval)));
    IS_STRING          : Result := StringToOleStr(WideString(UTF8String(z.value.str.val)));
  end;
end;
Должно быть имя? вне форума Ответить с цитированием
Старый 12.04.2015, 00:01   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Возможно, эта тема как-то поможет:delphi 7 - utf8 to ansi
Streletz вне форума Ответить с цитированием
Старый 12.04.2015, 00:28   #5
Должно быть имя?
Пользователь
 
Регистрация: 11.04.2015
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Возможно, эта тема как-то поможет:delphi 7 - utf8 to ansi
Мои значения не такие уж маленькие -_- я могу получить русский текст
Код:
ShowMessage(AnsiString(UTF8String(z.value.str.val)));
Но когда пытаюсь переконвертировать в PAnsiChar, то кодировка опять слетает, как будто этот тип не дружит с utf8, или я делаю что то не так

Код:
ShowMessage(PAnsiChar(AnsiString(UTF8String(z.value.str.val))) );

И да, у меня Delphi XE7
Должно быть имя? вне форума Ответить с цитированием
Старый 12.04.2015, 00:39   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от Должно быть имя? Посмотреть сообщение
И да, у меня Delphi XE7
В XE7 тоже есть функция Utf8ToAnsi.
Streletz вне форума Ответить с цитированием
Старый 12.04.2015, 00:42   #7
Должно быть имя?
Пользователь
 
Регистрация: 11.04.2015
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
В XE7 тоже есть функция Utf8ToAnsi.
Так а зафиг она мне??? легко можно глянуть что она вернет = WideString, а он мне нафиг не сдался, если в конечном итоге мне нужно получить PAnsiChar с русскими буквами

Именно PAnsiChar. А не AnsiString, WideString или PWideString - PWideChar

Цитата:
Сообщение от Должно быть имя? Посмотреть сообщение
Так а зафиг она мне??? легко можно глянуть что она вернет = WideString, а он мне нафиг не сдался, если в конечном итоге мне нужно получить PAnsiChar с русскими буквами

Именно PAnsiChar. А не AnsiString, WideString или PWideString - PWideChar
....................

Последний раз редактировалось Stilet; 12.04.2015 в 08:16.
Должно быть имя? вне форума Ответить с цитированием
Старый 12.04.2015, 01:42   #8
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

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

Опиши изначальную задачу.
Vapaamies вне форума Ответить с цитированием
Старый 12.04.2015, 07:43   #9
Должно быть имя?
Пользователь
 
Регистрация: 11.04.2015
Сообщений: 68
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Аффтар, ты чудак. Приведенная тобой процедура неработоспособна в любом случае, поскольку PAnsiChar нельзя передавать наружу просто так, если только это не константная строка.

Опиши изначальную задачу.
Просто надо создать несколько функций, которые возвращают разные строковые типы

Код:
  function ZvalStrS(z:zval) : string; // есть поддержка UTF8
  function ZvalStrA(z:zval) : AnsiString; // есть поддержка UTF8
  function ZvalStrW(z:zval) : WideString; //есть поддержка UTF8

  function ZvalStrPAChar(z:zval) : PAnsiChar; // НЕТУ поддержки UTF8

  function ZvalStrPWChar(z:zval) : PWideChar; // есть поддержка UTF8
Должно быть имя? вне форума Ответить с цитированием
Старый 12.04.2015, 08:19   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
создать несколько функций, которые возвращают разные строковые типы
А почему тогда через PБлаБлаChar? Почему не именно строку как обычно?
И Зачем столько разных функций? Я бы например использовал не их а класс TEncoding - надежнее получилось бы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отобразить русские буквы. InkBlack Помощь студентам 2 29.09.2011 20:12
Русские буквы в case YourLastSong Общие вопросы C/C++ 2 05.05.2011 17:50
Русские буквы morgan97 Паскаль, Turbo Pascal, PascalABC.NET 4 10.03.2011 10:15
Не видно русские буквы. Go.away.noir SQL, базы данных 2 08.09.2009 12:16