plik xml ?

0

Witam

Mam dwa pliki xml - zawartość taka sama ale jednak różnią się. Jeden z nich otwiera się w przeglądarce a drugi nie.
zapisuję go przez ofstream outfile, ios::app
powiedzcie mi czym różnią się te pliki? i jak zrobić, żeby plik bad zapisać tak samo jak ten ok?

notepad++ pokazuje mi takie same informacje o kodowaniu, o bom itp doszedłem do tego, że gdy w pliku zmienię kodowanie na iso9958-2 a następnie zrobię konwertuj do utf bez bom to zaczyna otwierać się. ALe chciałbym wiedzieć jak zapisać ten plik normalnie czyli z poziomu buildera c++ bez żadnych ręcznych kombinacji w notepad++

Pozdrawiam

1

Wrzuc gdzieś te pliki albo zrób chociaż file plik i zobacz co wypisze, albo pokaż nam hexdump tych plików. Mamy wróżyć z kuli?

0

jeszcze załączniki bo zapomniałem o nich
tylko zmieniłem rozszerzenie z xml na txt bo nie chciało mi przyjąć ale sprawdziłem, że po zmianie rozszerzenia jest dalej ten problem.

0

1.xml: XML 1.0 document, UTF-8 Unicode (with BOM) text, with very long lines, with CRLF line terminators
2.xml: XML 1.0 document, ISO-8859 text, with very long lines, with CRLF line terminators

No ewidentnie się różnią ;) To ze w nagłowku w xml masz napisane że UTF-8 to jeszcze o niczym nie świadczy ;]

0

To błagam o informację jak mam stworzyć ten plik, żeby miał dobry nagłówek?
Ja robię tak w builder c++
ofstream outfile("c:\export\plik.xml", ios::app);
pod ios podstawiałem kolejno wszystkie dostępne opcje czyli in, out, bin itd ale to nic nie daje

Czyli to co jest w pliku bad ma bom a plik dobry nie ma bom?

0

Ech. Zacznij czytać tutaj: http://www.joelonsoftware.com/articles/Unicode.html bo chyba niewiele rozumiesz.
Dla zobrazowania sytuacji:
hexdump pierwszego pliku: http://4programmers.net/Pastebin/5759
hexdump drugiego pliku: http://4programmers.net/Pastebin/5760

To są ZUPEŁNIE różne pliki. Dane są kodowane w zupełnie inny sposób!

0

Niewiele mi to mówi. Że różni się kodowanie to domyśliłem się ale potrzebuję rozwiązania, żeby zapisać to w poprawnym formacie a dokładniej kodowaniu.
Ten zrzut hex to już nic mi nie zobrazował poza tym, że pliki różnią się.

0

Musisz zmienić kodowanie tych danych. Znajdź do tego jakąś bibliotekę bo sam c++ czegoś takiego chyba nie ma, a co do bcb to nie wiem.

0

To chyba powinienem z tym problemem przejść na forum c++

0

Skoro jestem z tym wątkiem już na c++ to proszę Was bardzo powiedzcie mi jak mam zmienić to nieszczęsne kodowanie?
Jak stworzyć zwykły plik ale o dopowiednim lub żądany kodowaniu, względnie jak mogę przekonwertować plik.
Mowa o builder c++
kiedyś, ktoś napisał, że można przez stringgrid i
xml->SaveToFile("c:\export\plik.xml",TEncoding::UTF8)
ale mój builder nie pozwala w savetofile na żadne inne parametry poza ścieżką do pliku.

0

To może napisz której wersji Buildera używasz... i jakiego typu jest ten obiekt "xml" na którym wykonujesz SaveToFile. A ogólnie, jaka jest wejściowa postać danych, które chcesz zapisać do pliku? W jakim obiekcie/zmiennej jakiego typu/ewentualnie jak zakodowane je otrzymujesz?

0

To może napisz której wersji Buildera używasz... i jakiego typu jest ten obiekt "xml" na którym wykonujesz SaveToFile. A ogólnie, jaka jest wejściowa postać danych, które chcesz zapisać do pliku? W jakim obiekcie/zmiennej jakiego typu/ewentualnie jak zakodowane je otrzymujesz?

Używam Buider 5 pro
a cała reszta jest opisana w poprzednich postach, włącznie z plikami xml

0

Na prawdę nikt nie wie jak to zrobić?
To powiedzcie mi może, w jaki sposób stworzyć i wypełnić danymi plik xml? w builderze 5

0
tuz napisał(a):

Na prawdę nikt nie wie jak to zrobić?
To powiedzcie mi może, w jaki sposób stworzyć i wypełnić danymi plik xml? w builderze 5

No ale już zostało napisane - musisz użyć jakiegoś zewnętrznego API, żeby ustawić kodowanie.
Używając Qt wyglądałoby to tak:

QFile file(path);
file.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream output(&file);
output.setCodec("UTF-8");

Jak nie chcesz Qt, a piszesz pod windą, to zostaje używania WinAPI.

tuz napisał(a):

To powiedzcie mi może, w jaki sposób stworzyć i wypełnić danymi plik xml? w builderze 5

Tutaj polecam poczytać:

http://www.functionx.com/cppbuilder/xml/Lesson01.htm

i również ogarnąć takie coś jak XML DOM. C++ samo w sobie nie ma mechanizmów do parsowania XML - ale są zewnętrzne api, biblioteki. Możliwe jest nawet używanie bindingu (xml -> klasy cpp ->xml).

0

No dobrze, ale żeby użyć TXML... muszę przejść na wyższą wersję buildera. Ktoś mądry (na tym forum) wpuścił mnie w maliny, bo chciałem posłużyć się gotowym komponentem i na tym robić plik xml a napisał, że szkoda czasu, że to niewdzięczny komponent i lepiej zrobić zwykły plik tekstowy. Możliwe, że pomimo swojej wielkiej wiedzy nie miał doświadczenia.

Tak na szybko to wymyśliłem coś takiego. To bardzo łopatologicznie ale na szybko nie mam lepszego pomysłu. Mam dobry plik, mogę go otworzyć i usunąć wszystko z niego a wstawić to co chcę, jest szansa, że zachowa niezmienione, dobre kodowanie. Ktoś coś wie? czy można jakoś szybko wyczyścić zawartość pliku, który otworzę?

Pozdrawiam

0

Nie nie nie, to tak nie działa. Zrozum że "kodowanie" nie jest związane z plikiem jako takim tylko z danymi które w nim są. Czemu nie przeczytałeś artykułu który ci podlinkowałem? Jak wpakujesz do pliku kilka bajtów to NIE WIADOMO jak je odczytać i tylko informacja o typie danych i kodowaniu pozwala uzyskać sensowne wyniki. Ale równie dobrze te dane można zinterpretować zupełnie inaczej.

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