Форум: "Начинающим";
Текущий архив: 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. Удивись результату.
Разные
Ёкарный бабай. Если у вас АПИ с сервисом на основе 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]Чë набросились?
Сказали дизайнеру ландшафта использовать стриглист, вот и использует.
← →
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