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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.77 MB
Время: 0.006 c
15-1300454463
stas
2011-03-18 16:21
2011.07.03
потоковое видео


15-1300391272
vajo
2011-03-17 22:47
2011.07.03
Проблема со звуком на компе.


2-1300823978
Xalexo
2011-03-22 22:59
2011.07.03
как найти числовой ID, путь и описание службы (service)


2-1301297993
aka
2011-03-28 11:39
2011.07.03
Пазлы


15-1300700731
P
2011-03-21 12:45
2011.07.03
Как правильно перевести на Английский фразу





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский