Текущий архив: 2011.07.03;
Скачать: CL | DM;
Внизxml не отображает кириллицу Найти похожие ветки
← →
smart (2011-03-14 09:40) [0]Здравствуйте! Как изменить кодировку xml? При
<?xml version="1.0" encoding="windows-1251" ?>
он не отображает кириллицу, если изменить на<?xml version="1.0" encoding="UTF-8"?>
то он пишет Bad xml structure. Root element must be document. Как быть?
← →
RWolf © (2011-03-14 10:03) [1]приведите текст проблемного XML.
← →
smart (2011-03-14 10:12) [2]
> приведите текст проблемного XML.<?xml version="1.0" encoding="windows-1251"?>
<document>
<function name="catalogCreate">
<param name="login">logg</param>
<param name="pass">password</param>
<param name="idemployer">1</param>
<param name="name"><![CDATA[Новый справочик]]></param>
<param name="iddepartment">1000</param>
</function>
<client name="SomeProgram" version="1.0"/>
</document>
← →
Медвежонок Пятачок © (2011-03-14 10:22) [3]он не отображает кириллицу
Кто он?
http://www.dropmocks.com/mSbE1
← →
RWolf © (2011-03-14 10:42) [4]http://clip2net.com/s/PhXX
всё прекрасно отображается.
← →
smart (2011-03-14 10:57) [5]Этот xml создает новый каталог, и название этого каталога "Новый справочник" отображается так: Р’РёРґ Поступления. Как это исправить?
← →
RWolf © (2011-03-14 11:01) [6]ну так кодировка файла должна соответствовать заявленной.
если написано в шапке "windows-1251", то и сохранять в windows-1251, а не в UTF-8.
← →
smart (2011-03-14 11:03) [7]в том то и дело, что windows-1251 не отображает кириллицу
← →
RWolf © (2011-03-14 11:05) [8]
> smart (14.03.11 11:03) [7]
в [3] наглядно показано, что отображает.
← →
Медвежонок Пятачок © (2011-03-14 11:05) [9]надо монитор поменять.
← →
Медвежонок ХМЛ © (2011-03-14 11:06) [10]он у тебя не русифицирован.
← →
clickmaker © (2011-03-14 11:06) [11]> Этот xml создает новый каталог
сам xml не может ничего создавать
← →
smart (2011-03-14 11:07) [12]Удалено модератором
← →
Медвежонок ХМЛ © (2011-03-14 11:07) [13]у него монитор с функцией создания каталогов. но не русифицирован.
← →
Anatoly Podgoretsky © (2011-03-14 11:09) [14]
> smart (14.03.11 10:57) [5]
Зачем тогда говорил, что "xml не отображает кириллицу", вводил в заблуждение.
← →
Anatoly Podgoretsky © (2011-03-14 11:10) [15]> smart (14.03.2011 11:03:07) [7]
Чего опять не отображает, ты бы уж определился, а то скучно становится.
← →
Anatoly Podgoretsky © (2011-03-14 11:11) [16]> Медвежонок ХМЛ (14.03.2011 11:07:13) [13]
Русифицирован, а не UTFфицирован
← →
clickmaker © (2011-03-14 11:12) [17]> монитор с функцией создания каталогов. но не русифицирован
ну, если еще на гарантии, то можно поменять, наверно. Или прошивку скачать
← →
smart (2011-03-14 11:12) [18]Удалено модератором
← →
Anatoly Podgoretsky © (2011-03-14 11:15) [19]Ты уже три раза это повторил, а мы и в первый раз хорошо слышали.
← →
smart (2011-03-14 11:16) [20]Как это исправить?
← →
Игорь Шевченко © (2011-03-14 11:17) [21]А как XML относится к каталогу ?
← →
Медвежонок ХМЛ © (2011-03-14 11:17) [22]Как это исправить?
не доставать имя каталога как подстроку внутри [] из файла, который реально в утф-8
← →
smart (2011-03-14 11:28) [23]
> не доставать имя каталога как подстроку внутри [] из файла,
> который реально в утф-8
Можно по-подробней?
← →
Плохиш © (2011-03-14 11:30) [24]
> smart (14.03.11 11:16) [20]
>
> Как это исправить?
>
Надо исправить ошибки в твоей программе.
← →
Медвежонок ХМЛ © (2011-03-14 11:36) [25]Можно по-подробней?
Не можно, а нужно. Выкладывай подробности.
← →
smart (2011-03-14 11:42) [26]В дельфи использую
function catalogCreate
и такstringstream.WriteString("input_xml=<?xml version="1.0" encoding="windows-1251"?>")
...stringstream.WriteString("</document>");
создаю новый каталог. Новый каталог создается, только название его "непонятное". Если вместо названия каталога "Новый справочник" использовать латиницу - то все ок, но мне нужно чтобы название было на русском языке
← →
Медвежонок ХМЛ © (2011-03-14 11:43) [27]не доставать имя каталога как подстроку внутри [] из файла, который реально в утф-8
← →
smart (2011-03-14 11:47) [28]То есть просто
<param name="name"><Новый справочик></param>
?
← →
clickmaker © (2011-03-14 11:49) [29]содержимое узла не надо в <> закрывать
← →
smart (2011-03-14 11:53) [30]Так он Bad xml structure. Root element must be document пишет
← →
Медвежонок ХМЛ © (2011-03-14 11:54) [31]Потому что "Он" - умный. Он все правильно пишет.
← →
smart (2011-03-14 11:59) [32]Он-то умный. Это я просто недоконца изучил xml. Пока. Вот и прошу Вас помочь...
← →
Плохиш © (2011-03-14 12:02) [33]Надо использовать в программе WideString.
← →
Медвежонок Пятачок © (2011-03-14 12:03) [34]лучше не надо
← →
smart (2011-03-14 12:26) [35]
> содержимое узла не надо в <> закрывать
Полюбому иероглифы выходят (((
← →
smart (2011-03-14 12:44) [36]Кто знает, помогите плз. Оч надо
← →
clickmaker © (2011-03-14 12:48) [37]> Кто знает
"Он" знает
← →
Anatoly Podgoretsky © (2011-03-14 12:54) [38]> smart (14.03.2011 12:26:35) [35]
А может там по близости есть программисты?
← →
sniknik © (2011-03-14 12:55) [39]> Кто знает
чуда ждешь? сказали же "ошибки в твоей программе.", и кто ее здесь знает?
Медвежонок ХМЛ © (14.03.11 11:36) [25]
> Можно по-подробней?
> Не можно, а нужно. Выкладывай подробности.
← →
smart (2011-03-14 13:04) [40]Вот:
begin
stringstream:=TStringStream.Create("");
stringstream2:=TStringStream.Create("");
try
stringstream.WriteString("input_xml=<?xml version="1.0" encoding="windows-1251"?>");
stringstream.WriteString("<document>");
stringstream.WriteString("<function name="catalogCreate">");
stringstream.WriteString("<param name="login">logg</param>");
stringstream.WriteString("<param name="pass">password</param>");
stringstream.WriteString("<param name="idEmployer">1</param>");
stringstream.WriteString("</function>");
stringstream.WriteString("<client name="SomeProgram" version="1.0"/>");
stringstream.WriteString("</document>");
IdHTTP1.Request.ContentType:="application/x-www-form-urlencoded";
IdHTTP1.Request.ContentLength:=stringstream.Size;
stringstream.Position:=0;
stringstream2.WriteString(Form1.IdHTTP1.Post("http://888.888.888.888/api/functions.php", stringstream));
Form1.IdHTTP1.Disconnect;
Form1.XMLDocument1.LoadFromStream(stringstream2);
Form1.XMLDocument1.Active:=true;
Form1.XMLDocument1.SaveToFile("c:\expl.xml");
finally
stringstream.Free;
end;
← →
smart (2011-03-14 13:05) [41]С поправкой:
begin
stringstream:=TStringStream.Create("");
stringstream2:=TStringStream.Create("");
try
stringstream.WriteString("input_xml=<?xml version="1.0" encoding="windows-1251"?>");
stringstream.WriteString("<document>");
stringstream.WriteString("<function name="catalogCreate">");
stringstream.WriteString("<param name="login">logg</param>");
stringstream.WriteString("<param name="pass">password</param>");
stringstream.WriteString("<param name="idEmployer">1</param>");
stringstream.WriteString("<param name="name"><![CDATA[Новый справочик]]></param>");
stringstream.WriteString("</function>");
stringstream.WriteString("<client name="SomeProgram" version="1.0"/>");
stringstream.WriteString("</document>");
IdHTTP1.Request.ContentType:="application/x-www-form-urlencoded";
IdHTTP1.Request.ContentLength:=stringstream.Size;
stringstream.Position:=0;
stringstream2.WriteString(Form1.IdHTTP1.Post("http://888.888.888.888/api/functions.php", stringstream));
Form1.IdHTTP1.Disconnect;
Form1.XMLDocument1.LoadFromStream(stringstream2);
Form1.XMLDocument1.Active:=true;
Form1.XMLDocument1.SaveToFile("c:\expl.xml");
finally
stringstream.Free;
end;
← →
Медвежонок Пятачок © (2011-03-14 13:15) [42]Form1.IdHTTP1.Post("http://888.888.888.888/api/functions.php", stringstream);
ShowMessage(stringstream.string);
Вот твои крякозябры.
И как видишь, никакой xml здесь не использовался, и не мешал русскому наименованию папки.
← →
Медвежонок ХМЛ © (2011-03-14 13:17) [43]Точнее даже так
ShowMessage(Form1.IdHTTP1.Post("http://888.888.888.888/api/functions.php", stringstream));
← →
smart (2011-03-14 13:25) [44]Ошибка. в названиях каталога те же иероглифы...
← →
Медвежонок ХМЛ © (2011-03-14 13:26) [45]Все, я пас......
Медицина бессильна
← →
Плохиш © (2011-03-14 13:52) [46]
> smart (14.03.11 13:04) [40]
Какое отношение всё это <...> имеет к xml и созданию каталогов?
← →
smart (2011-03-14 13:55) [47]С помощью этого кода создается каталог.
<function name="catalogCreate">
- Создать новый каталог
← →
Плохиш © (2011-03-14 14:02) [48]Пора нанимать программиста.
← →
brother © (2011-03-15 06:07) [49]smart
ты понял к чему тебе предлагают нанять программиста?
← →
smart (2011-03-15 08:56) [50]
> Form1.IdHTTP1.Post("http://888.888.888.888/api/functions.
> php", stringstream);
> ShowMessage(stringstream.string);
>
> Вот твои крякозябры.
>
> И как видишь, никакой xml здесь не использовался, и не мешал
> русскому наименованию папки.
Проблемы у меня IdHTTP1.Post-кодировкой. Вместо Utf нужно использовать windows-1251, проблема кажется в этом. Как с этим разобраться?
← →
sniknik © (2011-03-15 09:26) [51]> Вместо Utf нужно использовать windows-1251
это тебя "осенило", или наконец то прочел ответы в ветке?
на самом деле windows-1251 единственное где нужно это в виндовой функции создания каталога (если не юникодная), а в Post, xml, ... вполне пойдет любая.
лирика.
> Как с этим разобраться?
учиться учится и еще раз учиться! (как расписывал ручку тов.Ленин)
p.s. все больше и больше смахивает на попытку "развода" (ну не бывает настолько ....).
← →
smart (2011-03-15 09:56) [52]И времени и желания нет и не было "на развод". Просто нужна помощь (((
← →
RWolf © (2011-03-15 11:06) [53]
> Как с этим разобраться?
отладчиком.
пошаговым выполнением алгоритма, с просмотром всех переменных.
← →
smart (2011-03-15 11:14) [54]Отладчиком пользовался, все просмотрел. В программе все нормально, кроме кодировки.
Я думаю что проблема в этой строке, но где именно пока непонятно...
> stringstream2.WriteString(Form1.IdHTTP1.Post("http://888.
> 888.888.888/api/functions.php", stringstream));
← →
Dennis I. Komarov © (2011-03-15 11:30) [55]
> Я думаю что проблема в этой строке
Да нет, проблема совсем в другом месте...
← →
smart (2011-03-15 11:33) [56]
> Да нет, проблема совсем в другом месте...
>
Где же?
← →
brother © (2011-03-15 11:38) [57]у тебя в коде вестимо
← →
Медвежонок Пятачок © (2011-03-15 11:45) [58]в [41] ошибок нет, хотя код и еретический.
ошибка дальше, в неприведенном здесь коде.
← →
DiamondShark © (2011-03-15 11:45) [59]
> smart (15.03.11 11:33) [56]
> > Да нет, проблема совсем в другом месте...> Где же?
В реализации http://888.888.888.888/api/functions.php
← →
Dennis I. Komarov © (2011-03-15 11:47) [60]
> brother © (15.03.11 11:38) [57]
вообще, я не это имел ввиду...
← →
Медвежонок ХМЛ © (2011-03-15 11:53) [61]с полученным из пхп ответом надо работать как с xml, а не юзать стрингстрим вырезая имя каталога позами и копями.
Вот и вся недолга.
← →
smart (2011-03-15 12:11) [62]
> ошибка дальше, в неприведенном здесь коде.
Вот листинг:function TForm1.catalogCreate(Login: string;Password1: string): string;
var
stringstream: TStringStream;
stringstream2: TStringStream;
begin
stringstream:=TStringStream.Create("");
stringstream2:=TStringStream.Create("");
try
stringstream.WriteString("input_xml=<?xml version="1.0" encoding="windows-1251"?>");
stringstream.WriteString("<document>");
stringstream.WriteString("<function name="catalogCreate">");
stringstream.WriteString("<param name="login">logg</param>");
stringstream.WriteString("<param name="pass">password</param>");
stringstream.WriteString("<param name="idEmployer">1</param>");
stringstream.WriteString("<param name="name">Новый справочик></param>");
stringstream.WriteString("</function>");
stringstream.WriteString("<client name="SomeProgram" version="1.0"/>");
stringstream.WriteString("</document>");
IdHTTP1.Request.ContentType:="application/x-www-form-urlencoded";
IdHTTP1.Request.ContentLength:=stringstream.Size;
stringstream.Position:=0;
ShowMessage(Form1.IdHTTP1.Post("http://"888.888.888"/api/functions.php", stringstream));
Form1.IdHTTP1.Disconnect;
Form1.XMLDocument1.LoadFromStream(stringstream2);
Form1.XMLDocument1.Active:=true;
Form1.XMLDocument1.SaveToFile("c:\expl.xml");
finally
stringstream.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
t: String;
begin
t:= MD5DigestToStr(MD5String(Password.Text));
IdEmpl1.Text:= catalogCreate(Login.Text,t);
end;
Попробовал так, но результата пока нет...
← →
Медвежонок Пятачок © (2011-03-15 12:19) [63]ты запарил уже своей непробиваемостью.
вот пришел к тебе ответ и ты его сохранил.
и в нем имя папки.
Form1.XMLDocument1.SaveToFile("c:\expl.xml");
где ты его читаешь?
имя для создаваемой папки где и как читаешь?
← →
smart (2011-03-15 12:31) [64]Новый каталог создается в другой - параллельной программе. Там и весь список папок. Только в название нового каталога сейчас там Новый справочник
← →
brother © (2011-03-15 12:34) [65]ты точно - НЕ ПРОБИВАЕМЫЙ!!!!
← →
brother © (2011-03-15 12:36) [66]> вот пришел к тебе ответ и ты его сохранил.
и скорее всего уже битый...
← →
Медвежонок ХМЛ © (2011-03-15 12:37) [67]Новый каталог создается в другой - параллельной программе.
Тогда спи спокойно.
У тебя ошибок нету.
← →
brother © (2011-03-15 12:40) [68]> Form1.XMLDocument1.LoadFromStream(stringstream2);
> Form1.XMLDocument1.Active:=true;
> Form1.XMLDocument1.SaveToFile("c:\expl.xml");
где его заполнение/чтение?
← →
Медвежонок ХМЛ © (2011-03-15 12:48) [69]это делается в третьей перпендикулярной программе.
разве не понятно?
← →
brother © (2011-03-15 12:49) [70]гыгы, я догадывался)
← →
Плохиш © (2011-03-15 12:52) [71]Судя по тому, что это блондинко засовывает в TStringStream, в /api/functions.php реализован обычный веб-сервис. Так почему бы не создать нормального клиента с помощью встроенного в делфи мастера?
PS. Долго ещё оно будет бодаться, используя комбинируя компоненты поддерживающие юникод и не поддерживающие :-))
← →
Dennis I. Komarov © (2011-03-15 12:56) [72]Да пусть бодается, если brain.sys встал криво...
← →
sniknik © (2011-03-15 13:18) [73]> с полученным из пхп ответом надо работать как с xml
х.м. ... у меня бывает от пхп рекордсеты(/json) приходят, или бинарные данные (например иконки/логотип компании), по протоколу/договоренности... (и кстати .php в конце может и не быть признаком обработчик пхп. как "ту сторону" реализуют я часто не знаю, а вот общие части протокола, со вполне определенными ссылками/функциями для всех одинаковы... эээ... в определенных пределах. стремимся к этому, это точно)
я к тому, уточнение, что "работать как с xml" надо только если пришел xml, что в данном случае не очевидно (и вряд ли будет с его "подходом").
← →
smart (2011-03-15 13:26) [74]
> "работать как с xml" надо только если пришел xml, что в
> данном случае не очевидно
Собственно xml:<?xml version="1.0" encoding="windows-1251" ?>
- <document>
- <info>
<api_version>1.0</api_version>
<time>10:11:15</time>
<execution_time>0.24351406097412</execution_time>
</info>
- <result value="0">
<id>120</id>
<message>120</message>
</result>
</document>
← →
Anatoly Podgoretsky © (2011-03-15 13:28) [75]> brother (15.03.2011 12:36:06) [66]
Не битый, а избитый, но не до конца.
← →
app © (2011-03-15 13:30) [76]Надоело, потрепаться можно и в Прочем
← →
Медвежонок Пятачок © (2011-03-15 13:31) [77]Мужик, тебе же сказали, покойся с миром, у тебя нет ошибок.
Их допустил программист второй, параллельной программы.
А ты иди в кассу за премией.
← →
sniknik © (2011-03-15 14:08) [78]> Собственно xml:
все таки xml... а чего же тогда xml в xml как есть с заголовком вкладывается? оно что должно телепатически правильно "сложить" document-ы?
← →
Медвежонок Пятачок © (2011-03-15 14:18) [79]и главное где же в нем хоть намек на имя каталога?
← →
Conflict © (2011-03-15 14:35) [80]оффтоп
А на самом деле в заголовок попадает кракозябла из [5] вот какая, а не Новый справочник:
Р’РёРґ ПоступленияCP1251 → UTF-8
Вид Поступления
/оффтоп
← →
sniknik © (2011-03-15 17:21) [81]http://delphimaster.net/view/2-1298888893/
http://delphimaster.net/view/2-1298888893/
(пора банить за смену ника :)
http://delphisources.ru/forum/showthread.php?t=15743
← →
Inovet © (2011-03-15 17:58) [82]> [81] sniknik © (15.03.11 17:21)
> (пора банить за смену ника :)
Да я сразу те ветки вспомнил. Месяц уже бьётся над справочниками. По-моему какое-то глухое непонимание даже не того, как сделать, а что надо сделать.
← →
boriskb © (2011-03-15 18:42) [83]
> По-моему какое-то глухое непонимание...
что надо учиться.
← →
gonzales (2011-03-19 23:39) [84]переконверти просто строку из UTF-8 в ASCII, вот например функция.
function TForm1.UTF8ToStrSmart(Value: String): String;
{Convert string from UTF-8 format mixed with standart ASCII symbols($00..$7f)}
var
Digit: String;
i: Word;
HByte: Byte;
Len: Byte;
begin
Result := "";
Len := 0;
if Value = "" then Exit;
for i := 1 to Length(Value) do
begin
if Len > 0 then
begin
Digit := Digit + Value[i];
Dec(Len);
if Len = 0 then
Result := Result + UTF8ToStr(Digit);
end else
begin
HByte := Ord(Value[i]);
if HByte in [$00..$7f] then //Standart ASCII chars
Result := Result + Value[i]
else begin
//Get length of UTF-8 char
if HByte and $FC = $FC then
Len := 6
else if HByte and $F8 = $F8 then
Len := 5
else if HByte and $F0 = $F0 then
Len := 4
else if HByte and $E0 = $E0 then
Len := 3
else if HByte and $C0 = $C0 then
Len := 2
else begin
Result := Result + Value[i];
Continue;
end;
Dec(Len);
Digit := Value[i];
end;
end;
end;
end;
а вам, уважаемые стыдно должно быть, не можете парню помочь, просто жлобы какие-то собрались. Вообще чувак, не ходи сюда, есть другие ресурсы и люди там адекватные.
← →
gonzales (2011-03-19 23:44) [85]да, чуть не забыл, вот еще функция
function TForm1.UTF8ToStr(Value: String): String;
{Convert string from UTF-8 format into ASCII}
var
buffer: Pointer;
BufLen: LongWord;
begin
BufLen := Length(Value) + 4;
GetMem(buffer, BufLen);
FillChar(buffer^, BufLen, 0);
MultiByteToWideChar(CP_UTF8, 0, @Value[1], BufLen - 4, buffer, BufLen);
Result := WideCharToString(buffer);
FreeMem(buffer, BufLen);
end;
используем
s:=form1.UTF8ToStrSmart(s1);
← →
Игорь Шевченко © (2011-03-20 00:33) [86]
> а вам, уважаемые стыдно должно быть
Чувство долга есть у каждого, но одним вечно кажется,
что они что-то должны, а другие уверены, что должны им
← →
sniknik © (2011-03-20 11:18) [87]> есть другие ресурсы и люди там адекватные.
сходи уж тогда по третьей ссылке из sniknik © (15.03.11 17:21) [81], и там тоже "постыди" "адекватных" людей которые перестали ему помогать... когда тоже самое пошло "на второй круг". (у нас это пошло раньше, в первых ссылках этого поста)
да, и кстати, твои выложенные процедуры, это тоже не помощь, это медвежья услуга, при применении без понимания. у него же xml, а это значит пофигу в какой оно кодировке внутри, если в его заголовке указана правильная.
к тому же в дельфе есть стандартные процедуры перекодировщики.
блин, потом и рождаются "монстры", указано одно, содержание другое, внутри данных не перекодированные теги, указан внешний парсер/"проверяльщик" (который существует только на машине клиента), и т.д. с которыми мне постоянно приходится иметь дело...
Страницы: 1 2 3 вся ветка
Текущий архив: 2011.07.03;
Скачать: CL | DM;
Память: 0.76 MB
Время: 0.006 c