Я немного перефразирую ваш вопрос.Я полагаю, что вы спрашиваете: «Могу ли я открыть документ и прочитать его, как если бы он был UTF-8, при условии, что он действительно должен быть ISO8869-xx или Windows-12xx, без потерь?».Это то, что пытается опубликовать код Python, который вы опубликовали.
Ответ на этот вопрос нет .Размещенный вами код Python будет искажать документы, если они содержат какие-либо символы выше порядкового 127. Это потому, что «кодовые страницы» используют числа от 128 до 255 для представления по одному символу каждый, где UTF-8 использует этот диапазон номеров для прокси многобайтовых символов,Таким образом, каждый символ в вашем документе, которого нет в ASCII, будет либо интерпретирован как недопустимая строка, либо будет объединен с последующими байтами для формирования единой кодовой точки UTF-8, если вы неправильно проанализировали файл как UTF-8.
В качестве конкретного примера, скажем, ваш документ в Windows-1252.Он содержит последовательность байтов 0xC3 0xAE или «М®» (A-тильда, зарегистрированный знак товарного знака).В UTF-8 та же самая последовательность байтов представляет один символ «ï» (маленькое «i» с диарезом).В Windows-874 та же последовательность будет «ร ฎ».Это довольно разные строки - моральное оскорбление может стать приглашением играть в шахматы или наоборот.Значение утеряно.
Теперь немного другой вопрос - "могу ли я без потерь конвертировать мои файлы из их текущей кодировки в UTF-8?"или «Могу ли я представить все данные из текущих файлов в виде потока UTF-8?».Ответ на эти вопросы (по модулю несколько нечетких битов) да .Unicode разработан, чтобы иметь кодовую точку для каждого идеоглифа в любой ранее существующей кодовой странице, и в целом преуспел в этой цели.Есть несколько грубых краев, но вы, вероятно, будете хорошо работать с использованием Unicode в качестве общего формата обмена (и UTF-8 - хороший выбор для его представления).
Однако для осуществления преобразованияВы должны уже знать и указать формат, в котором существуют файлы, когда они читаются .В противном случае Python будет некорректно работать с не-ASCII-символами, и вы сильно повредите свой текст (фактически, непоправимо, если вы отбросите либо последовательности invalid-in-UTF8, либо источник определенного неправильно преобразованного байтового диапазона).
В случае, если текст является all , 100% ASCII, вы можете открыть его как UTF-8 без проблем, так как первые 127 кодовых точек совместно используются двумяпредставления. * * тысяча двадцать-один