/ / Kompleksowy moduł zastępowania znaków w Pythonie dla nie-unicode i non-ascii dla HTML - python, unicode, kodowanie znaków, dekodowanie łańcuchów

Kompleksowy charakter wymiany moduł Pythona dla standardu unicode i innych niż ascii dla HTML - python, unicode, kodowanie znaków, dekodowania ciąg

Czy istnieje kompleksowa wymiana postacimoduł dla Pythona, który znajduje wszystkie znaki spoza ascii lub nie-unicode w łańcuchu i zastępuje je odpowiednikami ascii lub unicode? Ten komfort z argumentem „ignoruj” podczas kodowania lub dekodowania jest szalony, ale podobnie jest z „?” w każdym miejscu, w którym była nie przetłumaczona postać.

Szukam jednego modułu, który okazuje się nieprzyjemnyznaki i dostosowuje je do żądanego standardu. Zdaję sobie sprawę, że ilość zachowanych alfabetów i kodowań sprawia, że ​​jest to w pewnym stopniu niemożliwe, ale na pewno ktoś to zrobił? Nawet podstawowe rozwiązanie byłoby lepsze niż status quo.

Uproszczenie transferu danych, które to oznaczałoby, jest ogromne.

Odpowiedzi:

4 dla odpowiedzi № 1

Nie sądzę, że to, co chcesz, jest naprawdę możliwe - ale myślę, że istnieje przyzwoita opcja.

unicodedata ma metodę „normalizacji”, która może z wdziękiem degradować tekst dla Ciebie ...

import unicodedata
def gracefully_degrade_to_ascii( text ):
return unicodedata.normalize("NFKD",text).encode("ascii","ignore")

zakładając, że używany zestaw znaków jest jużzmapowane do unicode - lub przynajmniej mogą być zmapowane do unicode - powinieneś być w stanie degradować wersję Unicode tego tekstu do ascii lub utf-8 z tym modułem (jest to również część biblioteki standardowej)

Pełne dokumenty - http://docs.python.org/library/unicodedata.html


0 dla odpowiedzi nr 2

Aby spojrzeć na każdy indywidualny charakter i zgadnij jegokodowanie byłoby trudne i prawdopodobnie niezbyt dokładne. Możesz jednak użyć chardet, aby spróbować wykryć kodowanie całego pliku. Następnie możesz użyć metody string decode () i encode (), aby przekonwertować kodowanie na utf-8.

http://pypi.python.org/pypi/chardet

A utf-8 jest wstecznie kompatybilny z ASCII, więc nie będzie to nic wielkiego.