Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.10.30;
Скачать: [xml.tar.bz2];

Вниз

Как из UTF8 получить WideString   Найти похожие ветки 

 
leon2011 ©   (2011-07-08 11:43) [0]

Уважаемые мастера подскажите пожалуйста. Обращаюсь с запросом к серверу, сервер возвращает мне ответ в StringList в кодировке UTF8. При сохранении в файл все русские буквы заменяются на коды, вот например Разные р как вместо кодов получить WideString?


 
leon2011 ©   (2011-07-08 11:45) [1]

Пример русских закодированных букв не прошел, повторяю:

Разные р


 
leon2011 ©   (2011-07-08 11:47) [2]

Да что ты будешь делать!

Специально добавил "_":

_Р_а_з_н_ы_е_р


 
leon2011 ©   (2011-07-08 11:48) [3]

) короче говоря каждая буква закодирована четырехзначным числом, начинается с "&#", а заканчивающимся ";"


 
Anatoly Podgoretsky ©   (2011-07-08 11:49) [4]

> leon2011  (08.07.2011 11:43:00)  [0]

MultiByteToWideChar


 
Anatoly Podgoretsky ©   (2011-07-08 11:51) [5]

> leon2011  (08.07.2011 11:43:00)  [0]

Во первых где пример исходных данных, и что получилось, а также код


 
RWolf ©   (2011-07-08 11:58) [6]

если числа четырёхзначные, это явно не UTF-8.


 
Медвежонок Пятачок ©   (2011-07-08 12:01) [7]

При сохранении в файл все русские буквы заменяются на коды

Оптический обман.
Никто ничего не заменяет, если только ты сам не меняешь. А ты ничего не меняешь.
Значит оно такое с сервера и приходит.


 
han_malign   (2011-07-08 12:53) [8]

http://www.w3schools.com/html/html_entities.asp


 
leon2011 ©   (2011-07-08 13:03) [9]

Уточню. Использую API твиттера. Через Synapse отправляю Get запрос в ответ получаю XML, который загрузаю в StringList:

fHTTP: THttpSend;

var
SL:tstringlist;

fHTTP.HTTPMethod("GET", "https://api.twitter.com/1/users/lookup.xml?screen_name="+S);
SL.LoadFromStream(fHTTP.Document);

Если SL сохранить в файл то там будет что-то в этом роде:

<?xml version="1.0" encoding="UTF-8"?>
<users type="array">
<user>
 <id>176110669</id>
 <name>algin</name>
 <screen_name>allgin</screen_name>
 <location>Russia Krasnodar</location>
 <description>1056;1072;1079;1085;1099;1077;

перед каждым 4-х значным числом стоят символы "&#". Если сервер так и отдает, то вопрос все равно остается открытым как получить читаемый текст?


 
Медвежонок Пятачок ©   (2011-07-08 13:05) [10]

То есть ты сейчас трезвый и всерьез думаешь, что сервер отдал иначе, но проклятый стринглист в методе сэйв все испортил?


 
Anatoly Podgoretsky ©   (2011-07-08 13:21) [11]

Это не UTF-8, а Юникод, транспортная HTML кодировка, цифры десятичный код.
Тебе надо изучить HTML что бы не пороть ерунду.


 
leon2011 ©   (2011-07-08 13:48) [12]

Медвежонок Пятачок я совершенно трезв, я грешил на Синапс если честно наивно полагая что если в документации по API написано что отдавать будет в UTF8 то именно в нем и будет отдавать. Анатолий, так как же мне сконверить эту кодировку в читаемый вид при услови что там может быть не только кириллица но и скажем немецкий текст с умляутами?


 
Медвежонок Пятачок ©   (2011-07-08 13:50) [13]

я грешил на Синапс

Ага на синапс. И говорил при этом, что замена происходит при сохранении в файл.


 
Anatoly Podgoretsky ©   (2011-07-08 14:08) [14]


> leon2011 ©   (08.07.11 13:48) [12]

Так он и отдает в UTF-8, но почему ты думаешь, что в странице не может быть констант в HTML нотации? Я же не зря тебе рекомендую, почитать об организации HTML, это будет у тебя не последнее удивление, ты еще сможешь ознакомиться и с другими методами.


 
Anatoly Podgoretsky ©   (2011-07-08 14:09) [15]

Да и похоже, что ты в Дельфи не умеешь работать с кодами символов.


 
leon2011 ©   (2011-07-08 14:24) [16]

Ну а Delphi есть функция переводящая подобную кодировку в читаемую или придется писать самому?


 
Anatoly Podgoretsky ©   (2011-07-08 14:27) [17]

> leon2011  (08.07.2011 14:24:16)  [16]

Есть, это TWebBrowser


 
leon2011 ©   (2011-07-08 14:41) [18]

мне нужен невизуальный метод


 
DiamondShark ©   (2011-07-08 15:18) [19]


>  <description>1056;1072;1079;1085;1099;1077;перед каждым
> 4-х значным числом стоят символы "&#".

это xml-entity.
загрузи ответ в xml-парсер, и посмотри InnerText элемента description. Удивись результату.
&#1056;&#1072;&#1079;&#1085;&#1099;&#1077;

Ёкарный бабай. Если у вас АПИ с сервисом на основе xml, то какого рожна вы городите какие-то велосипеды со стринглистами? У вас что, TXmlDocument нету?


 
Dennis I. Komarov ©   (2011-07-08 15:22) [20]


> DiamondShark ©   (08.07.11 15:18) [19]

Это следующая глава камасутры...


 
sniknik ©   (2011-07-08 15:51) [21]

> Это следующая глава камасутры...
камасутра это то что сейчас, и она кончится как только перейдут на стандартный парсер (TXmlDocument)... и что важнее, она кончится и для тех кому не повезет работать по связке чего либо с таким "велосипедистом".


 
Dennis I. Komarov ©   (2011-07-08 16:06) [22]


> и она кончится как только перейдут на стандартный парсер
> (TXmlDocument)...

... ее предстоит еще познать


 
Плохиш ©   (2011-07-08 16:41) [23]

Ч&#235; набросились?
Сказали дизайнеру ландшафта использовать стриглист, вот и использует.


 
leon2011 ©   (2011-07-08 17:03) [24]

TXMLDocument не заработал на некоторых машинах клиентов, может винда была кастрированная или еще что-то но от него было решено отказаться. Может сообщество посоветует хороший бесплатный парсер для четко структурированного XML решающего мою проблему с UFT8?


 
DiamondShark ©   (2011-07-08 19:07) [25]


> TXMLDocument не заработал на некоторых машинах клиентов,
>  может винда была кастрированная или еще что-то но от него
> было решено отказаться.

Лучше бы было решено вчитаться со словарём в сообщение об ошибке.
TXMLDocument работает поверх MSXML, который, в случае "кастрированной винды", элементарно скачивается с микрософта.


> Может сообщество посоветует хороший бесплатный парсер для
> четко структурированного XML решающего мою проблему с UFT8?

MSXML (и его дельфийская обёртка TXMLDocument) -- это и есть хороший бесплатный парсер.
Самый хороший и самый бесплатный.
Сообщество не даст соврать.


 
sniknik ©   (2011-07-08 19:14) [26]

> XMLDocument не заработал на некоторых машинах клиентов, может винда была кастрированная или еще что-то
explorer (/IE) тоже что-то не работали на тех машинах? а ведь без части DOM он на любой страничке "падать" будет...

> посоветует хороший бесплатный парсер для четко структурированного XML
а попробуй... TXMLDocument !?

> решающего мою проблему с UFT8?
у тебя нет проблемы с UFT8. вот сохрани свою страничку в ANSI (из блокгнота, "сохранить как"). поставь только в заголовке вместо encoding="UTF-8" - encoding="windows-1251"... и ??? проблемные "буквы-символы"  изменились? а открой получившееся "не работающим на некоторых машинах IE"? и??? теперь у тебя проблема с виндовой кодировкой, так?


 
leon2011 ©   (2011-07-09 23:50) [27]

В общем проблема решилась вот такой функцией:

function convert(s: string): string;
var
 i: Integer;
 c: string;
begin
 i:=1;
 while i<=Length(s) do begin
   if(s[i]="&")and(i<Length(s))and(s[i+1]="#")then begin
     Inc(i,2);
     c:="";
     while s[i]<>";" do begin
       c:=c+s[i];
       Inc(i);
     end;
     Result:=Result+WideChar(StrToInt(c));
   end else Result:=Result+s[i];
   Inc(i);
 end;
end;

Надеюсь кому-нибудь пригодится.

Спасибо всем тем, кто за 26 постов мне так и не помог, а особенная благодарность Подгоретскому, который даже в этом разделе форума считает возможным самоутверждаться на начинающих программистах.


 
Германн ©   (2011-07-10 03:42) [28]


> В общем проблема решилась вот такой функцией:

Не уверен, что эта функция решила именно проблему. Скорее это "затычка". Сегодня на одном компьютере она сработала. Завтра/на других компьютерах она не сработает.


 
Германн ©   (2011-07-10 03:45) [29]


> а особенная благодарность Подгоретскому

Не "тс", а "ц".
P.S. АП утверждаться уже давно не нужно. :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.10.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.004 c
15-1309954783
dest81
2011-07-06 16:19
2011.10.30
select, sum как правильней


15-1309505832
Andy BitOff
2011-07-01 11:37
2011.10.30
Поправка к вакансии


2-1310404809
Qq
2011-07-11 21:20
2011.10.30
Не открывает проект


2-1310371260
.dzmitry
2011-07-11 12:01
2011.10.30
поиск в локальной БД


15-1309984198
Юрий
2011-07-07 00:29
2011.10.30
С днем рождения ! 7 июля 2011 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский