Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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 &#8594; 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.69 MB
Время: 0.012 c
15-1300321466
Дмитрий Тимохов
2011-03-17 03:24
2011.07.03
Нашел по рекламе на delphimaster.ru


15-1300310991
Юрий
2011-03-17 00:29
2011.07.03
С днем рождения ! 17 марта 2011 четверг


15-1300438782
compuser
2011-03-18 11:59
2011.07.03
Несворачиваемая, дырявая форма


15-1299283968
dmk
2011-03-05 03:12
2011.07.03
Локализация DELPHI


2-1301060792
Fr
2011-03-25 16:46
2011.07.03
Текст на TImage