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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2016, 13:15   #1
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию Получение ответа сервера

После отправки запроса на сервер ВК, чтобы узнать имя и фамилию пользователя, в качестве ответа, в параметрах first_name и last_name получаю одни "???"

Код:
resp := idhttp1.Get('https://api.vk.com/method/users.get?user_ids='+UserName(user_url)+'&version=5.50&access_token=' + token);
Ответ сервера:

Цитата:
{"response":[{"uid":281931204,"first_name":"???? ??","last_name":"??????????"}]}
Идентификатор пользователя передаётся корректно, но в качестве имени и фамилии одни знаки вопроса. В чём может быть проблема?
Сайт о программировании и трехмерной графике - cybersite.ucoz.net
cyberdev вне форума Ответить с цитированием
Старый 04.04.2016, 13:33   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В кодировке. Скорее всего вы пытаетесь читать/выводить UTF-8 как ANSI.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.04.2016, 14:48   #3
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
В кодировке. Скорее всего вы пытаетесь читать/выводить UTF-8 как ANSI.
Тип результата функции Get, String, а это символы AnsiChar, согласно 7 версии Делфи, если не ошибаюсь. Так что результат должен быть изначально представлен в AnsiChar, согласно моему предположению. Но если это не так, то перевожу предполагаемый Utf8 в Ansi.

Код:
  resp := idhttp1.Get('https://api.vk.com/method/users.get?user_ids='+UserName(user_url)+'&version=5.50&access_token=' + token);
  resp := Utf8ToAnsi(resp);
И в результате ничего не меняется

Цитата:
{"response":[{"uid":281931204,"first_name":"???? ??","last_name":"??????????"}]}
Если в имени и фамилии знаки вопроса, то почему тогда uid передается вполне корректно?
Сайт о программировании и трехмерной графике - cybersite.ucoz.net
cyberdev вне форума Ответить с цитированием
Старый 04.04.2016, 15:07   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Если в имени и фамилии знаки вопроса, то почему тогда uid передается вполне корректно?
Потому что цифры и буквы русского это две большие разницы в утф, 1251 и т.д.
p51x вне форума Ответить с цитированием
Старый 04.04.2016, 15:18   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Если в имени и фамилии знаки вопроса, то почему тогда uid передается вполне корректно?
В UTF-8 первые 128 символов (цифры, латинские буквы и т.п.) совпадают с ASCII и занимают тоже 1 байт.
http://www.asciitable.com/
http://local.joelonsoftware.com/wiki...BB%D0%BE%D0%B2
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.04.2016, 15:47   #6
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
В UTF-8 первые 128 символов (цифры, латинские буквы и т.п.) совпадают с ASCII и занимают тоже 1 байт.
http://www.asciitable.com/
http://local.joelonsoftware.com/wiki...BB%D0%BE%D0%B2
Ну если результат функции Get, String, а это набор символов AnsiChar, то есть, от 0 до 255, то, имя и фамилия уже изначально идут в виде "???" и никакие преобразования результата Get не помогут, т.к, код символа "А" кириллицы, в UTF-8, равен 1040, а это на много больше, чем 255. Вот Делфи и заменяет такие символы знаками "???". Но если с помощью преобразования результата ничего не решить, то должен же быть другой какой-то вариант решения данной проблемы?
Сайт о программировании и трехмерной графике - cybersite.ucoz.net
cyberdev вне форума Ответить с цитированием
Старый 04.04.2016, 15:57   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну что-то типа Utf8ToAnsi по идее должно помочь для русских букв (если в настройках ОС стоит русская локаль, что скорее всего так, раз нету других проблем с отображением русских букв на форме).

Посмотрите в отладчике и т.п. что вообще в строке находится (какие байты), может Инди уже что-то сделал с ней, я не в курсе как он работает с кодировками.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение ответа от FTP-сервера Joose WPF, UWP, WinRT, XAML 4 23.11.2014 22:03
Получение ответа сервера. Semreg Общие вопросы Delphi 1 01.12.2013 22:37
расшифровка ответа сервера -Flover- Работа с сетью в Delphi 2 07.10.2013 20:06
Анализ ответа сервера denis7656 PHP 2 27.04.2012 10:11
Обработка ответа от сервера Musho C# (си шарп) 1 13.10.2011 09:09