Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Проблема с сохранением документа в нужной кодировке
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
Использую редактор programmer's notepad. Всегда все было хорошо, то есть набирал документ, выбирал кодировку и сохранял документ. Открывал документ - он в той кодировке, в которой сохранял до этого. Сейчас переустановил ОС. Теперь, если в документе есть кириллица, то документ сохраняется в той кодировке, которую укажешь и после открытия документа показывает ту кодировку, в которой сохранял документ. Но, если в документе только латица, то в какой бы кодировке не сохранять документ, после закрытия и снова открытия документа, показывает кодировку ansi. Что за фигня?..
DelphinPRO
Отправлено: 08 Марта, 2012 - 21:03:44
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
я недавно на этом форуме объяснял причину такого поведения. Воспользуйтесь поиском.
----- Чем больше узнаю, тем больше я не знаю.
Pavelbeginner
Отправлено: 08 Марта, 2012 - 23:52:22
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
Может лучше дайте ссылку на тему? Посмотрите, пожалуйста, в своих сообщениях. Или хотя бы дайте ключевые слова для поиска. Спасибо.
DelphinPRO
Отправлено: 09 Марта, 2012 - 00:38:33
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Pavelbeginner пишет:
Посмотрите, пожалуйста, в своих сообщениях.
Если подскажете как это сделать на этом форуме, обязательно посмотрю
Честно, не нашел такой функции.
----- Чем больше узнаю, тем больше я не знаю.
Pavelbeginner
Отправлено: 09 Марта, 2012 - 01:42:06
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
DelphinPRO пишет:
Pavelbeginner пишет:
Посмотрите, пожалуйста, в своих сообщениях.
Если подскажете как это сделать на этом форуме, обязательно посмотрю
Честно, не нашел такой функции.
Чёрт, я тоже не нашел... Непродуманный форум. Знаю, что врядтли захотите ещё раз объяснить из-за это происходит, но попросить я Вас попрошу... С меня плюс в Вашу карму(хотя врядтли Вас это интересует ).
DelphinPRO
Отправлено: 09 Марта, 2012 - 02:03:43
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
речь идет, если я правильно понял, о UTF-8 без BOM? ( Потому что если ваш редактор не опознает кодировку с БОМом, то выкиньте его нафиг и заюзайте Notepad++ )
Дело в том, что однозначно и стопроцентно определить кодировку документа нельзя.
Те программы, которые автоматически определяют кодировки, делают это статистическим анализом, на основе частоты появления тех или иных символов в тексте.
Поэтому придумали специальную метку BOM для юникодных файлов - три непечатных байта в начале файла, которые однозначно идентифицируют кодировку документа. Для разных вариантов юникода - своя метка (почти, но это не важно ).
Однако веб-разработчики столкнулись с той проблемой, что PHP не умеет правильно обрабатывать эту метку и выводит ее как печатный символ. Пришлось метку удалять. Так появилась "кодировка" "UTF-8 without BOM", которая никакая не отдельная кодировка, на самом деле, а обрезанный utf-8
воот, мы подобрались к сути вопроса.
Как мы знаем, символы в utf-8 могут быть представлены переменным количеством
байтов от 1 до 6. Наиболее редкие "отодвинуты" в конец таблицы и занимают большее количество байт, а вся латинница уместилась в начале, и символы ее занимают по одному байту в полном соответствии с кодами из ANSI.
Именно поэтому вновь открывая файл, сохраненный в utf 8 без BOM, и не имеющий в себе кириллицы, редактор распознает как ANSI. А что ему еще остается, если латинница в обоих кодировках бинарно идентична?
----- Чем больше узнаю, тем больше я не знаю.
Pavelbeginner
Отправлено: 09 Марта, 2012 - 11:41:43
Частый посетитель
Покинул форум
Сообщений всего: 882
Дата рег-ции: Март 2010
Помог: 1 раз(а)
DelphinPRO пишет:
речь идет, если я правильно понял, о UTF-8 без BOM? ( Потому что если ваш редактор не опознает кодировку с БОМом, то выкиньте его нафиг и заюзайте Notepad++ )
Дело в том, что однозначно и стопроцентно определить кодировку документа нельзя.
Те программы, которые автоматически определяют кодировки, делают это статистическим анализом, на основе частоты появления тех или иных символов в тексте.
Поэтому придумали специальную метку BOM для юникодных файлов - три непечатных байта в начале файла, которые однозначно идентифицируют кодировку документа. Для разных вариантов юникода - своя метка (почти, но это не важно ).
Однако веб-разработчики столкнулись с той проблемой, что PHP не умеет правильно обрабатывать эту метку и выводит ее как печатный символ. Пришлось метку удалять. Так появилась "кодировка" "UTF-8 without BOM", которая никакая не отдельная кодировка, на самом деле, а обрезанный utf-8
воот, мы подобрались к сути вопроса.
Как мы знаем, символы в utf-8 могут быть представлены переменным количеством
байтов от 1 до 6. Наиболее редкие "отодвинуты" в конец таблицы и занимают большее количество байт, а вся латинница уместилась в начале, и символы ее занимают по одному байту в полном соответствии с кодами из ANSI.
Именно поэтому вновь открывая файл, сохраненный в utf 8 без BOM, и не имеющий в себе кириллицы, редактор распознает как ANSI. А что ему еще остается, если латинница в обоих кодировках бинарно идентична?
Спасибо за инфу, большую часть знал, вот только думал, что начальные байты или BOM используются для того, чтобы определить направление байтов(слева направо или справа налево), а не для идентификации кодировки.
Только вопрос есть. Почему до переустановки ОС даже, если в файле не было кириллицы, то редактор не тупил?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.