Przewodnik · Walidacja XML / kodowanie

XML: błąd kodowania, prologu UTF-8 i białych znaków

Tego typu problemy są częste i podstępne: komunikat wygląda na merytoryczny, a źródło błędu okazuje się czysto techniczne.

Typ

Przewodnik

Warstwa

Walidacja XML / kodowanie

Skutek

Błąd blokujący

Typowy komunikat GoKSeF

API odrzuca dokument jako błędny XML albo niepoprawnie zakodowany plik, mimo że treść FA(3) wydaje się poprawna.

KSeF jest bardzo czuły na to, czy plik jest zapisany i odczytany jako UTF-8 bez ukrytych znaków sterujących oraz bez ukrytych artefaktów formatowania.

Jak to poprawić

  1. 1 Zapisz plik jako spójne UTF-8 i upewnij się, że cały pipeline od generatora po wysyłkę używa tego samego wariantu kodowania.
  2. 2 Sprawdź i popraw prolog XML, zwłaszcza deklarację <?xml version="1.0" encoding="UTF-8"?>.
  3. 3 Usuń znaki niedrukowalne i niewidoczne znaki z nazw, opisów i numerów (np. zerowe znaki, niezamknięte entitety).
  4. 4 Sprawdź linie końcowe i separatory; unikaj ręcznej modyfikacji pliku w formatach, które doklejają dodatkowe znaki.
  5. 5 Wygeneruj nowy XML z niezależnego źródła i uruchom ponownie lokalną walidację.
  6. 6 Dopiero po wyeliminowaniu tych kwestii sprawdź status w KSeF.

Sprawdź przed ponowną walidacją

  • Plik jest jednoznacznie zapisany jako UTF-8.
  • Prolog XML i rzeczywiste kodowanie nie pozostają w konflikcie.
  • Nie ma ukrytych znaków sterujących ani uszkodzonego XML.

FAQ

Czy problem kodowania rozwiązuje tylko poprawa deklaracji?
Nie, deklaracja musi zgadzać się z realnym kodowaniem pliku oraz z faktyczną treścią zapisaną przez generator.
Czy BOM zawsze psuje walidację?
Nie zawsze, ale bywa źródłem problemów w realnych integracjach. Najbezpieczniej trzymać się jednego, spójnego standardu i konsekwentnie go testować.
Czy usunąć polskie znaki?
Nie, ale pamiętaj, że bezpieczny zapis to UTF-8 i poprawne zapisanie ich wartości jako znaków unicode.

Powiązane artykuły

Sprawdź poprawiony plik

Po poprawieniu danych źródłowych wygeneruj XML ponownie i sprawdź nowy plik w GoKSeF.