Tutaj dwa pytania. Mam zestaw plików, które zwykle są w formacie UTF-8 z BOM. Chciałbym je przekonwertować (najlepiej na miejscu) do UTF-8 bez BOM. Wygląda na to, codecs.StreamRecoder(stream, encode, decode, Reader, Writer, errors)
że poradzi sobie z tym. Ale tak naprawdę nie widzę dobrych przykładów użycia. Czy byłby to najlepszy sposób na rozwiązanie tego problemu?
source files:
Tue Jan 17$ file brh-m-157.json
brh-m-157.json: UTF-8 Unicode (with BOM) text
Ponadto byłoby idealnie, gdybyśmy mogli obsłużyć różne kodowanie danych wejściowych bez wyraźnej wiedzy (patrz ASCII i UTF-16). Wydaje się, że to wszystko powinno być wykonalne. Czy istnieje rozwiązanie, które może przyjąć dowolne znane kodowanie w Pythonie i wyprowadzać jako UTF-8 bez BOM?
edytuj 1 proponowane rozwiązanie od dołu (dzięki!)
fp = open('brh-m-157.json','rw')
s = fp.read()
u = s.decode('utf-8-sig')
s = u.encode('utf-8')
print fp.encoding
fp.write(s)
To daje mi następujący błąd:
IOError: [Errno 9] Bad file descriptor
wiadomosci
W komentarzach powiedziano mi, że błąd polega na tym, że otwieram plik w trybie „rw” zamiast „r +” / „r + b”, więc powinienem w końcu ponownie edytować moje pytanie i usunąć rozwiązaną część.
r+
. W trybie. Dodajb
też, aby działał również w systemie Windows bez żadnych zabawnych zakończeń linii. Na koniec zechcesz wrócić do początku pliku i skrócić go na końcu - zobacz moją zaktualizowaną odpowiedź.