Кодировка

  • Автор темы Guest_Andrei_*
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest_Andrei_*

Гость
#1
У меня проблема с отображением кодировки (IE, Firefox).
Предыстория такова. Сначала у меня стояла Win98+Apach+php+mysql и под этим хозяйством крутились (точнее только разрабатывались) сайты. Теперь я поставил на другой раздел ASPLinux10, подмонтировал старую www-папку (из раздела Win98), скопировал сайт в раздел ASPLinux (/var/www/html) и запустил его. В заголовке стоит META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251", но броузеры устанавливают UNICODE и выводят каракули. Если установить кодировку вручную, страница отображается нормально, но при переходе на другую страницу история повторяется. Кто-нибудь знает как с этим бороться?
 
D

dkameleon

Гость
#2
Бороться надо с глупыми броузерами, которые игнорируют Чарсет.
Или может быть у тебя документ реально в Юникоде сделан? :)
Проверь настройки редактора, которым правил странички.
 
S

sergushkin

Гость
#3
У меня была такая проблема. У меня был установлен RedHad9
Причиной являются не браузеры, а настройки операционной ситстемы.

Привожу описание настройки


Настройка RedHat 9 на русскую локаль KOI8-R


В свое время, после выхода в свет RedHat версии 8.0, мною была написана статья "Переход с RedHat-7.x на RedHat-8.0", в которой описывалось как заменить локаль UTF-8 на KOI8-R в связи глючности и проблемности русской локали UTF-8, с выходом RedHat версии 9 казалось, что эту проблему решили и русская локаль UTF-8 заработала как надо, правда не везде гладко, но решаемо. Однако многие пользователи RH9 хотят старую хорошо отработанную временем локаль KOI8-R, оно и понятно, UTF-8 все еще имеет проблемы с консольными приложениями, да и с некоторым старым софтом, от которого не хочется отказываться. Видимо по этой причине меня стали забрасывать письмами с просьбой рассказать как сделать такой переход, у меня нашлось немного времени это сделать, поэтому выполняю просьбу тех, кто меня об этом просил.

И так, первым делом надо установить локаль KOI8-R в /etc/sysconfig/i18n как это делалось обычно для RH7.x:

LANG="ru_RU.KOI8-R"
SUPPORTED="ru_RU.KOI8-R:ru_RU.koi8r:ru_RU:ru"
SYSFONT="cyr-sun16"
SYSFONTACM="koi8-u"

Примечание: Для RH8.0 приходилось ставить пакет kbd(consoletools) из RH7x, для RH9 этого делать не надо!!!

Далее, надо установить расскладку клавиатуры для данной локали, как обычно идем в /etc/sysconfig/keyboard и делаем примерно так:

KEYBOARDTYPE="pc"
KEYTABLE="ru-ms"

Вот собственно и все, что касается локализации, однако некоторые приложения в RH9 сильно завязаны на юникод и требуют замены, так как обычными настройками заставить их работать с KOI8-R мне не удалось. Почти все русские man'ы в RH9 конвертнуты в UTF-8, и поэтому пришлось немного доработать nroff, что бы он на лету конвертил из UTF-8 в KOI8-R, так что имейте это ввиду, если будут проблеммы с манами в кодировке KOI8-R.
Вот список пакетов подлежащих обязательной замене:
groff-1.18.1-24.i386.rpm
groff-perl-1.18.1-24.i386.rpm
groff-gxditview-1.18.1-24.i386.rpm
less-378-8.i386.rpm

Midnight Commander желательно тоже сменить:
mc-4.6.0-5.i386.rpm
Дополнительные необходимые приложения для MC:
Архиватор ARJ arj-3.10g-1.i386.rpm или русская версия arj-3.10g-ru.1.i386.rpm
Консольный MP3 плеер MPG123 mpg123-0.59s.mc2-2.i386.rpm или под K7 mpg123-0.59s.mc2-2.athlon.rpm

Все пакеты мы устанавливаем как rpm -U [имя пакета], кроме arj и mpg123, так как они ранее отсутствовали в системе и поэтому лучше установить их как rpm -i [имя пакета]. Про мою версию mpg123 и ее отличие от оригинальной можно прочитать на http://mcmcc.bat.ru. После обновления и установки этих пакетов этап по "коинизации" консоли можно считать законченным и переходим к Х-ам.

Х-ы практически не нуждаются в какой-либо доработки, если есть проблема с кодировкой в приложениях написанных на gtk12, то она решается правкой /etc/gtk/gtkrc.ru примерно так:

style "gtk-default-ru" {
fontset = "-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-koi8-*,\
-*-arial-medium-r-normal--12-*-*-*-*-*-koi8-r,\
-*-helvetica-medium-r-normal--12-*-*-*-*-*-koi8-r,\
-*-arial-medium-r-normal--12-*-*-*-*-*-koi8-r,*-r-*"
}
class "GtkWidget" style "gtk-default-ru"

Еще бы не плохо установить MS ttf фонты, я бы даже сказал обязательно:
ttf_webms-1.0-2.i386.rpm

Как и в RedHat 8.0 в 9-ой версии отсутсвует все, что связано с MP3, RedHat пошла на такой шаг после того как за распространение кодеков MP3 стали требовать денежные отчисления, поэтому все мультимедийные приложения содержащие связь с MP3 были модернизированы на уровне исходников и из них был удален весь код связаный с MP3. В принципе RedHat понять можно, им не охото в будушем иметь судебные разборки и проще подстраховаться заранее, но это положение касается распространителей, а не обычных пользователей и разработчиков, поэтому я подготовил некоторые пакеты дополнения, которые позволяют дополнить 9-ку возможностям работы с MP3.
Если вы используете в своей работе десктоп KDE, то вам необходимо обновить пакет kdemultimedia:
Для KDE-3.1 который идет в составе RH9:
kdemultimedia-3.1-5.i386.rpm
kdemultimedia-devel-3.1-5.i386.rpm
Для KDE-3.1.2 сборку которой осуществляла группа разработчиков KDE специально для 9-ки:
kdemultimedia-3.1.2-0.9x.2.i386.rpm
kdemultimedia-devel-3.1.2-0.9x.2.i386.rpm
Если для прослушивания музыки вы используете плеер XMMS, то для него я специально сделал отдельный MP3 плагин, описание этого плагина вы можете прочитать на http://mcmcc.bat.ru:
mpg123-xmms-1.2.7-21.p.i386.rpm
Возможно вам захочется создавать MP3 файлы, то енкодер LAME вам в этом поможет:
lame-3.94-1.i386.rpm или версия для K7 lame-3.94-1.athlon.rpm
lame-devel-3.94-1.i386.rpm
Вот собственно и все, что касается MP3 и RH9...

Хочу поделиться собранной мною JAVA v1.4.1 специально для RH9, как собрать самим JAVA SDK вы можете прочесть в моей статье "Самостоятельная сборка JAVA(tm) 2 SE v.1.4.1 из исходников с sun.com".

Так же хочу обратить ваше внимание на пакет cdrtools v.2.0, для работы с пишущими DVD/CD-RW, который входит в состав RH9, а именно на утилиту mkisofs, для создания ISO имиджей CD дисков, в которую я интегрировал свои патчи для полной руссификации и о которых можно прочитать на http://mcmcc.bat.ru:
cdda2wav-2.0-7.i386.rpm
cdrecord-2.0-7.i386.rpm
cdrecord-devel-2.0-7.i386.rpm
mkisofs-2.0-7.i386.rpm

В своей статье я указывал ссылки только на бинарные собранные rpm пакеты, но если кому интересны исходники пакетов в rpm, то вы можете взять их тут, кроме JAVA естественно;).

Заканчивая свою статью всем этим выше описанным и не обратив внимание на проблему сборки rpm пакетов, было бы с моей стороны не этично;)). Проблема заключается в том, что в RedHat посчитали необходимостью включить сборку debug rpm пакета к каждой собираемой программе, на что у многих вызывает сильное раздражение и зуд начистить кому-нибудь репу за такое извращение, но и это еще не все, ребята из RedHat'а придумали еще одну засаду, если в секции %files spec файла не описан файл, который появился $RPM_BUILD_DIR после %install, то такой пакет считается неправильным и сборка завершается ошибкой, на что реакция за такую подлость вызывает еще большую охоту начистить уже не одну репу;))))... На самом деле это все правится в макрос файлах и навсегда избавляет от тех неприятностях которых я описал, для этого возмите мои исправленные макросы и замените их из этого архива в соответсвующих директориях, а именно в /usr/lib/rpm и /usr/lib/rpm/redhat....
 
J

Jaga_

Гость
#4
ну вы, ребята, даете. Это не браузер, он-то все как раз нормально делает. Получает http-заголовок от сервера и отображает страницу в том, в чем его просили. Если страницы статические, то нужно менять настройки самого сервера. Для Апач, например в файле настроек httpd.conf меняем строчку AddDefaultCharset с того, что там написано на то, что вам нужно. Рядом находятся сами названия этих кодировок, например cp-1251(для рус-вин-кодировки).
Если страницы динамические (например, на PHP), то вопросы к PHP-модулям, или чем он там говорит на CGI. Как вариант, заменить объявление заголовка на вывод на печать строчки "Content-type: text/html; charset=cp-1251\n\n"
ЗЫ А насчет UTF8 vs. KOI8-R - вопрос спорный, хотя и не имеет никакого отношения к сабжу (серверу по барабану, какого типа байты он отсылает)
 

ioni

Well-Known Member
11.05.2006
340
0
#6
ASP Linux?
Первой строкой файла определить как
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1251" LCID="1049"%>

Другими словами, указывать необходимо не только кодировку статической части HTML ("META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251" в заголовке), но и кодировку диманической части.

В принципе это относиться к любому языку, не только к ASP
 
S

sergushkin

Гость
#7
ioni я с вами согласен, но этого недостаточно. Нужно еще настроить и ОС, на которой установлен Web-сервер.
 
G

Gisma

Гость
#8
сколько повторять : header("Content-type: text/html; charset=cp-1251");
В клинических случаях в .htaccess забить:
AddDefaultCharset windows-1251
 
N

neeoon

Гость
#9
я прописал header("Content-Type: text/html; charset=windows-1251"); в ие 6.0 - 7.0 все нормально, но в ие 5.0 и 5.5 все равно не понимает :)
 
G

Gisma

Гость
#10
убей осла об стену, хотя что-то ты опять не то сделал. раньше работало и под 4-тым ослом:( поставь какой плагин, который покажет принятые хедеры, вообще посмотри как в хедерах с пробелами все должно соответсвовать RFC
 
S

_serg_

Гость
#11
сделай wget адрес_кривой_страницы
и посмотри на заголовки которые выдает сервер
может там что не так?
 

ioni

Well-Known Member
11.05.2006
340
0
#12
Обязательно к прочтению!

Так вот, чтобы уж совсем полностью и безоговорочно получить нужную кодировку, нужно выполнить три (!) действия (я про ASP/IIS)

1/ Настроить сценарий кодировкой по умолчанию директивой
Код:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1251" LCID="1049"%>
2/ Непосредственно указать кодировку при генерировании данных путем
Код:
<% Response.Charset= "Windows-1251" %>
второй строкой в странице.

3/ Обязательно указать мета-хедер
Код:
META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251"
в разделе <HEAD> самой страницы, т.е. внутри HTML

Основания для того, чтобы дублировать вывод у меня появились после того, как я начал логически работать с выводом файлов - обратив внимание на то, что часто запросы winHTTP идут в стандартной кодировке, а не в той, которая указана (что в результате давало сразу несколько кодировок на странице и неправильное отображение как следствие)
 

Гость
#13
У меня совсем недавно такое было. Виноват в моем случае был "Русский Апач", который думает, что он умнее тебя и корежит кодировку по своему усмотрению. Вот ссылочка, где мне обьясняли как это дело исправить: http://peterhost.ru/forum/viewtopic.php?t=728
 
Статус
Закрыто для дальнейших ответов.