Brak polskich znaków w generowanym pliku xml

Odpowiedz Nowy wątek
2011-08-31 16:08
snp
0

Witam.
Generuję w Lazarusie plik xml.

function makeBlankXML():integer;
var
  Doc: TXMLDocument;                                  // variable to document
  RootNode, parentNode, nofilho: TDOMNode;                    // variable to nodes
begin
  try
    // Create a document
    Doc := TXMLDocument.Create;
    Doc.Encoding := 'UTF-8';

    // Create a root node
    RootNode := Doc.CreateElement('script');
    TDOMElement(RootNode).SetAttribute('name', 'some');
    Doc.Appendchild(RootNode);

    // Create a Object node
    RootNode:= Doc.DocumentElement;
    parentNode := Doc.CreateElement('node');
    TDOMElement(parentNode).SetAttribute('name', 'ążśźćółń');
    RootNode.Appendchild(parentNode);

writeXMLFile(Doc, 'default.xml');

  finally
    Doc.Free;
  end;
end;          

Problem jest tego typu, że zamiast ążśźćółń w pliku wynikowym dostaję ÄżÅźÄóÅÅ
Natomiast jeśli użyję funkcji UTF8Decode('ążśźćółń') w pliku wynikowym podglądając np. notatnikiem jest ok, ale problem nie jest do końca rozwiązany bo ten sam plik xml załadowany do innego obcego programu już nie pokazuje prawidłowych danych. Jest to chyba wina BOM, bo gdy odpaliłem xml'a w notepad++ i zapisałem cały plik jako UTF-8 without BOM, wizualnie w pliku nic sie nie zmieniło, ale już ten 'obcy' program zczytywał dane poprawnie.

Moje pytanie. Jak zapisać xml'a w kodowaniu UTF-8 without BOM z poziomu Delphi/Lazarus/Pascal?

Pozostało 580 znaków

2011-08-31 18:24
0

ten sam plik xml załadowany do innego obcego programu już nie pokazuje prawidłowych danych

czyli jakie pokazuje? daj screenshota.

Pozostało 580 znaków

2011-08-31 23:56
0
function makeBlankXML():integer;
var
  Doc: TXMLDocument;                                  // variable to document
  RootNode, parentNode, nofilho: TDOMNode;                    // variable to nodes
begin
  try
    // Create a document
    Doc := TXMLDocument.Create;
    Doc.Encoding := 'UTF-8';
 
    // Create a root node
    RootNode := Doc.CreateElement('script');
    TDOMElement(RootNode).SetAttribute('name', 'some');
    Doc.Appendchild(RootNode);
 
    // Create a Object node
    RootNode:= Doc.DocumentElement;
    parentNode := Doc.CreateElement('node');
    TDOMElement(parentNode).SetAttribute('name', UTF8Decode('ążśźćółń'));
    RootNode.Appendchild(parentNode);
 
    writeXMLFile(Doc, 'default.xml');
 
  finally
    Doc.Free;
  end;
end;        

pozdrawiam
paweld

Pozostało 580 znaków

2011-09-02 12:53
snp
0

Heh... opisałem ten przypadek w poprzednim poście. Mianowicie dodałem Doc.Encoding:='UTF-8'; na początku, string wrzuciłem do UTF8Decode(); wygenerował się plik xml, i w nim ciąg polskich znaków jest wyświetlany poprawnie. Natomiast ładując plik xml do innego programu ten ciąg wyświetla się tak jak pokazane jest to w załączniku (kiszka).

Ale tu uwaga, uwaga. Jeśli w notatniku++ otworzę tego xml'a i zapiszę to jako UTF8 without BOM, wtedy wszędzie ten ciąg polskich znaków jest wyświetlany prawidłowo. Więc to co podałeś jest połowicznym sukcesem. Musiałbym teraz przekonwertować plik na ten UTF8 without BOM. But how???

  • bug.png (0 MB) - ściągnięć: 79

Pozostało 580 znaków

2011-09-02 15:39
0

u mnie zapisuje w utf-8 bez bom. lazarus 0.9.30 fpc 2.4.2.
nie wiem jaki to inny program więc w załączniku masz spakowany xml wygenerowany przez program bez żadnych modyfikacji.


pozdrawiam
paweld

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0