Usuń BOM z napisów
Albo wklej tekst napisów
Opcje
BOM to trzy bajty na samym początku pliku, które mówią, w jakim kodowaniu plik jest zapisany. Jest niewidoczny w każdym edytorze i odtwarzaczu, nie zajmuje miejsca na ekranie, a w napisach nic się nie zmienia, gdy się go doda albo usunie. Zajmują się nim dwa rodzaje narzędzi: programy Windows zapisujące napisy, które dodają go domyślnie, oraz surowe parsery w potokach budowania, które odrzucają plik zaczynający się od niego. Ta strona otwiera pole w stanie, który nazywa jej tytuł, więc możesz je przełączyć, jeśli okaże się, że twój plik jest w drugą stronę. Plik UTF-16 zawsze ma BOM, bo to po nim czytnik wie, który z dwóch porządków bajtów widzi — prośba o usunięcie go tam zostawia go na miejscu.
W jakiej liczbie klatek na sekundę liczone są czasy. Na stronach formatów tego wymaga MicroDVD, bo zapisuje czasy jako numery klatek. Na stronach poświęconych liczbie klatek jest to stawka, według której zgrany był plik — wersja, dla której powstały napisy — a drugie pole na stronie przyjmuje liczbę klatek wideo, z którym napisy będą używane. Najczęstsze wartości to 23,976, 24, 25, 29,97, 30, 50, 59,94 i 60. Pomyłka przesuwa całą oś czasu, a na stronach poświęconych liczbie klatek przesuwa ją o współczynnik, a nie o stałą wartość.
Znacznik kolejności bajtów to jeden znak, U+FEFF, stojący przed wszystkim innym w pliku. Wiele narzędzi go pisze, a wiele go nie oczekuje, i te drugie pokazują go jako krótki blok symboli przyklejony do początku pierwszego bloku. Ta strona go zdejmuje i zostawia wszystko inne dokładnie tak, jak zastała.
Usunięcie go ma największe znaczenie tam, gdzie plik przestaje być czymś, co czyta człowiek, a staje się czymś, co parsuje program: potoki budowania napisów, skrypty czytające pierwszy wiersz pliku i formaty, których specyfikacja mówi, że początkowe bajty są pierwszym znakiem pierwszego bloku. Ma też znaczenie przy łączeniu plików, bo znacznik w środku połączonego pliku jest znakiem w środku bloku. I ma znaczenie przy dostawie: jeśli specyfikacja, do której dostarczasz, mówi UTF-8 bez znacznika, znacznik jest różnicą, którą sprawdzający znajdzie.
Czego strona nie zrobi, to nie zdecyduje za ciebie o niczym innym. Numery bloków, timecode’y, tekst bloków i końce wierszy wracają takie, jakie weszły, łącznie z CRLF, a plik, który nie miał znacznika, wraca co do bajtu, zamiast być przepisany na coś równoważnego. Usunięcie znacznika to nie to samo co zmiana kodowania znaków pliku, i te dwie rzeczy są często mylone: ta strona zmienia pierwszy znak pliku i nic w tym, jak zakodowana jest reszta.
Jest jeden przypadek, w którym tytuł tej strony i to, co naprawdę się dzieje, rozchodzą się, i warto go znać przed uruchomieniem. Plik UTF-16 potrzebuje swojego znacznika: bez niego nie ma sposobu odróżnić dwóch kolejności bajtów, więc plik UTF-16 zapisany bez znacznika nie da się odczytać z powrotem. Przepuść taki plik przez tę stronę, a pobrany plik nadal będzie niósł znacznik, bo alternatywą byłby plik, którego nikt nie otworzy. Jeśli twój plik jest w UTF-16 i znacznik musi zniknąć, chcesz innego kodowania, a nie tego samego bez znacznika, i strona konwertująca kodowania jest podlinkowana niżej.
Znacznik jest usuwany z pliku, który pobierasz, więc oba okienka mogą tu wyglądać identycznie – znak o zerowej szerokości dokładnie tak wygląda. Sprawdź wynik we wskaźniku kodowania edytora albo w przeglądarce heksadecymalnej: plik bez znacznika zaczyna się od pierwszego bajtu swojego pierwszego bloku. Wszystkie dwanaście formatów obsługiwanych przez ten serwis jest przyjmowanych, od SRT po zwykły transkrypt tekstowy, i nic nie jest wysyłane: plik jest czytany, zmieniany i zapisywany w twojej przeglądarce.
Przykłady
Oznaczony plik ze zdjętym znacznikiem
Wejście
1
00:00:01,000 --> 00:00:02,000
The room is dark.
Wynik
1
00:00:01,000 --> 00:00:02,000
The room is dark.
Wejście zaczyna się od U+FEFF, a wynik nie: pliki różnią się dokładnie tym jednym znakiem i to jest cała operacja. Pliki w tym stanie zwykle wychodzą z windowsowego programu do napisów, a powodem, dla którego ludzie chcą się pozbyć znacznika, jest krok budowania albo ścisły parser, który patrzy na początkowe bajty, a nie na bloki.
Plik Windows: znacznik usunięty, powroty karetki zachowane
Wejście
1
00:00:01,000 --> 00:00:02,000
Marked and Windows.
Wynik
1
00:00:01,000 --> 00:00:02,000
Marked and Windows.
Znika tylko znacznik. Każdy powrót karetki jest własnością pliku i ta strona nie ma o nich zdania – kto chce zmienić jedno i drugie, chce strony końców wierszy, a rozdzielenie tych dwóch rzeczy jest tym, co czyni każdą z nich bezpieczną do uruchomienia na pliku, którego nie otwierałeś. Oczekiwany tekst nadal trzyma CRLF dokładnie tak, jak wejście.
Plik bez znacznika, zwrócony co do bajtu
Wejście
1
00:00:01,000 --> 00:00:02,000
The room is dark.
Wynik
1
00:00:01,000 --> 00:00:02,000
The room is dark.
Nie było czego usuwać, więc plik wraca niezmieniony – łącznie z brakiem znacznika. To przypadek, który łapie implementację zapisującą najpierw znacznik i usuwającą go potem albo normalizującą plik po drodze: uczciwy odczyt „nie było nic do zrobienia” to samo wejście, co do bajtu, a nie jego uporządkowana wersja.
Częste pytania
Jak sprawdzić, czy mój plik napisów ma znacznik kolejności bajtów?
Otwórz go w edytorze pokazującym kodowanie pliku; plik UTF-8 ze znacznikiem jest zwykle opisany jako UTF-8 with BOM albo UTF-8 BOM, a nie jako zwykłe UTF-8. Jeśli to nie pomoże, zajrzyj w pierwsze bajty w przeglądarce heksadecymalnej: plik zaczynający się od EF BB BF go nosi, a plik zaczynający się od pierwszego znaku bloku nie. Blok symboli na początku pierwszego wiersza to to samo, widziane przez program, który odczytał znacznik jako trzy zwykłe znaki.
Dlaczego znacznik zostaje w pliku UTF-16 po jego usunięciu?
Bo plik UTF-16 go potrzebuje. UTF-16 zapisuje każdy znak jako dwa bajty, a obie kolejności bajtów wyglądają z zewnątrz podobnie, więc znacznik mówi czytnikowi, która to kolejność – plik UTF-16 bez znacznika nie da się odczytać z powrotem, ani temu serwisowi, ani niczemu innemu. Strona, na której jesteś, zachowuje go z tego powodu. Aby dostać plik bez znacznika, zmień jego kodowanie na UTF-8 albo Windows-1252, gdzie znacznik jest opcjonalny.
Czy ta strona psuje plik napisów, który nigdy nie miał znacznika?
Nie. Wynikiem tego przypadku jest wejście co do bajtu i nic nie jest dla niego raportowane. Uruchomienie strony na pliku, którego stanu nie jesteś pewien, jest bezpieczne z konstrukcji z tego samego powodu: gdy nie ma znacznika do usunięcia, nie ma czego zapisywać, a gdy jest, zmiana jest najmniejsza z możliwych. Uruchomienie, które nie znalazło nic do zrobienia, nie jest uruchomieniem, które coś zrobiło.
Czy plik napisów może mieć więcej niż jeden znacznik kolejności bajtów?
Tak, i zdarza się, ilekroć narzędzie dodaje znacznik bez sprawdzenia, czy już jest – drugi znacznik daje plik, który w edytorze wygląda całkowicie normalnie, a różni się od normalnego pliku początkowymi bajtami. Ta strona usuwa wszystkie, a nie jeden, więc podwójnie oznaczony plik jest czyszczony jednym przebiegiem, a kolejne uruchomienie niczego już nie zmienia.
Czy usunięcie znacznika zmienia kodowanie mojego pliku napisów?
Nie w sensie, o którym ludzie zwykle mówią. Tekst pliku to nadal te same znaki, a reszta jest nadal zakodowana tak samo; zmienia się to, że czytnik nie ma już początkowych bajtów mówiących mu o kodowaniu. Plik UTF-8 bez znacznika to zwykłe UTF-8, które i tak zakłada większość narzędzi. Zmiana samego kodowania to osobna strona, podlinkowana tutaj.
Czy znacznik wróci, gdy pobiorę plik napisów?
Nie. Pobranie jest chwilą, w której plik jest zapisywany, a uruchomienie tej strony zapisuje go bez znacznika, więc dostajesz to, co opisują oba okienka. Kodowanie, w którym plik jest zapisywany, jest zachowywane z odczytu, z jednym wyjątkiem: plik, który przychodzi jako UTF-16, jest zapisywany z powrotem jako UTF-16 i zachowuje znacznik, bo ten znacznik jest strukturalny, a nie dekoracyjny.