Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.30;
Скачать: CL | DM;

Вниз

Как из 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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.012 c
2-1310381051
leon2011
2011-07-11 14:44
2011.10.30
Помогите разобраться с TextOutW


15-1309781468
Kerk
2011-07-04 16:11
2011.10.30
База данных по документам министерства обороны за 1941-1945


11-1238569778
Дмитрий
2009-04-01 11:09
2011.10.30
Не компилируется KOLComObj


15-1309126862
Nic
2011-06-27 02:21
2011.10.30
ipod touch 4 - поиск по документу word


2-1310449758
bestolkov
2011-07-12 09:49
2011.10.30
Запись в файл данных динамического массива