CaptainFlint

Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Crownethers Цитата:| Вы попробовали вышеприведенный пример (на разных версиях ТС) или это теоретические рассуждения (скорее всего, теоретически верные, но речь в данном случае о практических проблемах в последних версиях ТС)? | Я не имею возможности проверить, как именно был создан приведённый INI-файл. Поэтому я попробовал у себя (впрочем, в этом не было необходимости, так как я неоднократно работал с этими строками сам и читал описание этого механизма от самого Гислера). У меня новые записи сохранились в точности так, как я описал: если wincmd.ini сохранён в кодировке ANSI, то значение параметра сохраняется в виде "BOM-сигнатура UTF-8" + "строка в кодировке UTF-8". Конкретный пример: замена греческой буквы "бета" на букву "s с седилем" (к сожалению, на ру-борде не поддерживается юникод, чтобы вписать тут сами буквы). При просмотре INI-файла в кодировке ANSI записи выглядят так: Код: test_search=п»їОІ test_replace=п»їЕџ | Здесь первые три символа "п»ї" — EF BB BF, BOM-сигнатура, а последующие два символа — представление соответствующей буквы в UTF-8 кодировке при просмотре её в режиме ANSI. Если переключить просмотрщик в режим UTF-8, то сигнатура спрячется, так как это по сути юникодный невидимый символ, а двухбуквенные последовательности отобразятся в виде тех самых букв, которые я задал для поиска-замены. Если удалить этот блок, пересохранить INI в формате UTF-16LE, а потом снова сохранить такой же шаблон ИГП, то секция уже будет выглядеть просто как Код: test_search=B test_replace=S | (где буквами B и S я условно обозначил вышеназванные юникодные символы) без всяких добавок, в чём легко убедиться, открыв его в шестнадцатеричном режиме и проверив конкретные коды (B2 03 и 5F 01, что в кодировке UTF-16LE соответствует кодам 03B2 и 015F, кодирующими указанные символы). Разумеется, если взять ANSI-INI с такими цепочками и начать его перекодировать туда-сюда, то имеющиеся там UTF-8 последовательности могут поломаться. Всё-таки это довольно нестандартный хак и он требует аккуратного обращения с текстом, тщательного контроля над тем, из какой и в какую кодировку выполняется конвертация, и корректно ли она выполняется. Плюс, не каждый текстовый редактор осилит сохранение BOM-сигнатуры в неположенном месте. Хоть, строго говоря, это обычный юникодный символ, слишком уж прижилось его использование исключительно в начале файла в качестве маркера кодировки, и какие-то редакторы могут его просто удалять. P. S. Всё вышеописанное проверял на версиях 11.51 и 11.55. Но этому механизму примерно столько же лет, сколько юникодной версии Тотала.
---------- Почему же, ё-моё, ты нигде не пишешь "ё"? |
| Всего записей: 5667 | Зарегистр. 11-11-2002 | Отправлено: 01:41 19-05-2025 | Исправлено: CaptainFlint, 01:42 19-05-2025 |
|