2008-11-17 12 views
67

Używam xsl do kontrolowania danych wyjściowych mojego pliku xml, ale znak BOM jest dodawany.Jak usunąć znak BOM z mojego pliku xml

+2

Nie wygląda duplikatu jako inne pytanie wymienia konkretne narzędzie. – vitaut

+0

W przeciwieństwie do zwykłych plików tekstowych, znacznik kolejności bajtów na pliku XML nie powinien nigdy powodować żadnych problemów, ponieważ wszystkie parsery XML powinny być w stanie sobie z nim poradzić, nawet jeśli jest to "BOM UTF-8". W rzeczywistości jest nawet sugerowany na samym standardzie XML jako część character encoding autodetection. – CesarB

+0

To nie jest sugestia, sekcja F nie jest normatywna. BOM UTF-8 jest wyraźnie dozwolony przez standard Unicode, ale nie jest zalecany - http://en.wikipedia.org/wiki/Byte_order_mark#cite_note-2 - Zestawienie BOM UTF-8 nie wskazuje kolejności bajtów. – mjn

Odpowiedz

1

Po prostu usuń pierwsze dwa bajty za pomocą dowolnego edytora szesnastkowego.

+10

Lub 3, w zależności od smaku UTF – MSalters

+5

Lub 4, dla UTF-32. Ale najprawdopodobniej jest to 3, UTF-8 jest najczęstszym kodowaniem dla XML. –

0

Miałem wrażenie, że XML jest zachęcany do pisania w Unicode, w kodowaniu Unicode i że niektóre kody Unicode są określone, aby zawierały początkowy znak kolejności bajtów. Bez tego znaku kolejności bajtów twój plik nie jest już poprawnie zakodowany w kodowaniu Unicode i dlatego nie ma już poprawnego XML. Procesory XML są zachęcane do wybaczania, aby natychmiast zawieść przy najmniejszym błędzie (takim jak niepoprawne kodowanie Unicode). Jakie typy procesorów XML chcesz złamać?

Oczywiście, usunięcie znacznika kolejności bajtów z dokumentu zakodowanego w UTF-8 sprawia, że ​​ten dokument wygląda na kodowany ASCII (nie Unicode), a niektóre procesory tekstowe mogą korzystać tylko z dokumentów zakodowanych w formacie ASCII. Czy to jest to, z czym pracujesz?

+0

W przypadku plików XML, które nie określają kodowania i nie mają LM, domyślnym kodowaniem jest UTF-8. – mjn

0

Jakie kodowanie wyjściowe jest używane przez XSL? Jakie kodowanie jest dokumentem wejściowym? Skąd pochodzą dane wejściowe i gdzie w międzyczasie zostały zapisane/przesłane/pobrane?

XML i XSL powinny domyślnie używać UTF-8, jeśli nic innego nie jest określone. Ale wyraźnie, coś tu idzie nie tak.

Jedną z rzeczy, która może się wydarzyć, jest to, że XML jest serwowany przez serwer sieciowy, który jest domyślnie ustawiony w ISO-8859-1, całkiem dobrym domyślnym ... pre-Unicode.

Nieco poza tematem, ale Joel's very instructive article o kodowaniu tekstu otworzyło mi oczy. Jest wielu ludzi, którzy poza tym są bardzo inteligentni jeśli chodzi o programowanie, ale wciąż upierają się przy myśleniu, że istnieje coś takiego jak "zwykły tekst" lub nazywają ich tekst "ASCII" lub "ANSI". Jest to problem, z którym naprawdę musisz się uporać, jeśli jeszcze tego nie zrobiłeś.

164
# vim file.xml 
:set nobomb 
:wq 
18

File BOM Detector (freeware dla Windows) umożliwia łatwe usunięcie bom.

+0

+1 Miałem garść plików z LM w nich, a to narzędzie pomogło mi je łatwo naprawić. Jest to jedyny sposób na wsad, który znalazłem do tej pory bez pisania skryptu. Dzięki! –

+0

+1 To mały samodzielny.exe, który robi dokładnie to, co myślisz, że powinien/mam nadzieję, że to zrobi po czymś BOMs pęczku twoich plików xml. – pettys

2

wystarczy dodać to w pliku XSLT:

<xsl:output method="text" 
     encoding="ASCII"/> 
1

Usuń symbol BOM z ciągiem z XSLT jest dość prosta:

<xsl:value-of select="translate(StringWithBOM,'','')"/>