Безопасно ли (без потери данных) конвертировать ANSI в UTF-8, а затем обратно в ANSI?

Я читал, что вы можете потерять данные, идущие от UTF-8 до ANSI.

Но если файл был изменен с ANSI на UTF-8 (и больше не изменялся в то время как в UTF-8), а затем снова был изменен на ANSI, это 100% безопасно?

1 ответ1

2

Это, вероятно, безопасно, но только если вы конвертируете между одними и теми же кодировками оба раза.

UTF-8 сам по себе не является набором символов - это способ кодировать Unicode в байты. Он может представлять те же символы, что и UTF-16, кодировка, которую использует современная Windows. Таким образом, реальный вопрос заключается в том, может ли преобразование в Unicode потерять информацию - и AFAIK, ответ «это не должно, но иногда может»:

  • У Старого Нового есть сноска об этом:

    Бонусная болтовня: даже в оба конца от ANSI до Unicode и обратно до ANSI могут быть потери, в зависимости от флагов, которые вы передаете, например, относительно использования предварительно составленных символов.

    Unicode , имеет несколько канонических форм - например, может быть сохранен как в качестве единственной (precomposed элемент коды), или в виде обычный ã + объединение тильды ( с разложением). Windows предпочитает первое, macOS предпочитает второе.

  • Я не совсем уверен, считается ли, например, Windows-932 как "ANSI", но я не удивлюсь, если были проблемы (как упомянуто в Википедии) из-за того же удвоения байта, что и для символа a и для разделителя пути, который обычно обратный слеш ...


Между тем, нет кодировки или кодовой страницы под названием "ANSI". Это название организации по стандартам, которая определила несколько кодировок текста. В Windows термин означает большой набор кодировок «Windows-125x» для различных стран и языков (в некоторой степени соответствующий кодировкам ISO 8859 и предположительно основанный на ранних черновиках, написанных ANSI).

Поэтому вполне возможно, что одна система называет Windows-1251 "ANSI", а другая использует Windows-1257 для одного и того же, и в результате каждая из них может представлять символы, которые другая не может. (На самом деле, последняя версия Windows 10.1809 даже позволяет использовать UTF-8 в качестве кодировки "ANSI".) В случае систем с различной конфигурацией, даже если первоначальное преобразование в Unicode не приводит к потере информации, обратное преобразование в "ANSI" будет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .