Собсно вопрос - как определить? текст из файла на сервере, выводится в браузер, результирующая windows-1251, и ессно если файл юникодовый - будет ерунда. Есть ли более-менее проверенные способы проверки исходной кодировки? Желательно без всяких доп. расширений пхп.
есть файл на сервере. текстовый. я этот файл file() и вывожу в браузер - echo() страница отдается в windows-1251, поэтому если файл в какой нибудь cp866 или UTF-8, то в браузер выведется ерунда. поэтому вопрос - как определить исходную кодировку файла?
vasa_c да, эту вероятность уже попробывал, потому и задал вопрос, чет как то кривовато иногда определяет
А со стопроцентной вероятностью определить кодировку текста не зная ничего о нем нельзя. Вы сами должны знать, что за файлы у вас лежат и откуда они появились и в какой кодировке.
Далеко не всегда Я сохраняю через скрипт в файл текст в Виндовс кодировке, а воспроизвожу его в Mac почему-то ((
Если текст в файле небольшой, то можно переводить через пользовательскую функцию charset_x_win. Её описание и библиотека здесь: http://popoff.donetsk.ua/text/work/libs/a/charset/. Правда переводит она только из koir и utf8.
Я имел ввиду, что при использовании этой функции, кодировку не надо будет вообще определять. То есть просто всегда перекодировать в cp1251. И проблема соотвественно будет решена. А насчет быстродействия, то если, повторюсь, текст в файле небольшой, то на производительность, мое мнение, это несильно скажется.
Вам не кажется, что прежде чем перекодировать в cp1251 нужно определить в чем на данный момент находится текст?
А как это сделать? mb_decet_encoding не всегда работает корректно, ни одного скрипта, хотя бы на 99,9 процентов определяющий точно кодировку, лично я не знаю.
Это собственно и есть ответ на первоначальный вопрос. Более-менее проверенные способы есть. Стопроцентных нет.
Ну вот я и предложил лучший способ, на свой взгляд. Конечно, я не ответил на сам вопрос, но, по моему убеждению, подсказка как решить саму проблему, это тоже самое, что и ответ на вопрос, или даже лучше, если вопрос задан неправильно.