"abc\udc34xyz"
Python 2.7 では、Unicode 文字列を UTF-8 に正常に変換できます(結果は です"abc\xed\xb0\xb4xyz"
)。しかし、UTF-8文字列をegに渡すと。pango_parse_markup()
またはg_convert_with_fallback()
、「変換入力のバイト シーケンスが無効です」などのエラーが表示されます。どうやら GTK/Pango 関数は、文字列内の「対になっていないサロゲート」を検出し、(正しく?) それを拒否します。
"abc\udc34xyz".encode("utf8", "replace")
Python 3 では、Unicode 文字列を UTF-8 に変換することさえできません (エラー: "'utf-8' コーデックは、位置 3 の文字 '\udc34' をエンコードできません: サロゲートは許可されていません")。唯一のサロゲートを他の文字に置き換えた有効な UTF8 文字列を取得します。それは私にとっては問題ありませんが、Python 2 のソリューションが必要です。
問題は、Python 2.7 で、唯一のサロゲートを U+FFFD のような置換文字に置き換えながら、その Unicode 文字列を UTF-8 に変換するにはどうすればよいかということです。できれば、標準の Python 関数と GTK/GLib/G... 関数のみを使用する必要があります。
ところで。Iconv は文字列を UTF8 に変換できますが、U+FFFD に置き換えるのではなく、単に悪い文字を削除するだけです。