W Pythonie 2.7 mogę pomyślnie konwertować ciąg znaków Unicode "abc\udc34xyz"
na UTF-8 (wynikiem jest "abc\xed\xb0\xb4xyz"
). Ale kiedy przekazuję ciąg znaków UTF-8 do np. pango_parse_markup()
lub g_convert_with_fallback()
, pojawia się komunikat "Nieprawidłowa kolejność bajtów w danych wejściowych konwersji". Najwyraźniej funkcje GTK/Pango wykrywają "niepowiązany surogat" w łańcuchu i (poprawnie?) Odrzucają go.wykryj/usuń niepowiązany znak zastępczy w Pythonie 2 + GTK
Python 3 nie zezwala nawet na konwersję ciągu znaków Unicode na kodowanie UTF-8 (błąd: kodek '' utf-8 'nie może kodować znaku' \ udc34 'w pozycji 3: surrogaty nie są dozwolone "), ale Mogę uruchomić "abc\udc34xyz".encode("utf8", "replace")
, aby uzyskać poprawny ciąg znaków UTF8 z samotnym surogatem zastąpionym przez inną postać. Dla mnie to w porządku, ale potrzebuję rozwiązania dla Pythona 2.
Pytanie brzmi: w Pythonie 2.7, jak mogę przekonwertować ten ciąg Unicode na UTF-8, zastępując samotnego surogata jakimś zastępczym znakiem, takim jak U + FFFD? Najlepiej używać tylko standardowych funkcji Pythona i funkcji GTK/GLib/G ...
Przy okazji. Iconv może konwertować ciąg znaków na UTF8, ale po prostu usuwa zły znak zamiast zastępowania go U + FFFD.