Это меня действительно раздражает, поэтому я надеюсь, что кто-нибудь здесь сможет сказать мне, что я делаю не так. Я уже некоторое время запускаю веб-сервер Apache на своем ноутбуке с Windows 7, чтобы протестировать некоторые программные приложения, которыми я занимаюсь в свободное время. Недавно я заметил, что символы Unicode на моих страницах не отображаются правильно в моем браузере. Я провел то, что оказалось множеством бессмысленных тестов, и обнаружил, что символы на самом деле отправляются как правильный UTF-8, и я также добавил строку <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
в начало моего вывода html, которая должна была исправить проблему, но на самом деле ничего не сделала. Затем я потратил время, чтобы проверить заголовки HTTP-ответа, и увидел, что Apache отправляет обратно это:
HTTP/1.1 200 ОК Дата: Вс, 19 июля 2015 18:18:40 GMT Сервер: Apache/2.2.25 (Win32) Кодирование передачи: фрагментированное Тип содержимого: text/html; кодировка=iso-8859-1
Хорошо, это кажется довольно простой проблемой. Согласно Интернету, я могу исправить это, добавив AddDefaultCharset utf-8
в свой файл httpd.conf. В файле не было никаких AddDefaultCharset
строк, поэтому я добавил его внизу точно так, как он написан выше. Затем я перезапустил службу Apache и обнаружил, что проблема не изменилась. Итак, я перезапустил свой компьютер, теоретически, что я могу не знать, как правильно перезапустить Apache, но он все еще не отображает символы правильно, и он все еще отправляет charset=iso-8859-1
заголовки.
Я также нашел веб-сайт, который предположил, что нечто под названием Windows VirtualStore может автоматически сохранять файл конфигурации где-то еще, просто чтобы подшутить надо мной, но я не верю, что это происходит, потому что я не могу найти никаких файлов Apache в каталоге VirtualStore. Кроме того, вы должны иметь возможность отключить VirtualStore, взяв на себя владение папкой, и я сделал это некоторое время назад, потому что он не позволял мне ничего менять иначе.
К сожалению, я даже не уверен, что еще посмотреть по этой проблеме. У кого-нибудь есть идеи?
решение1
Попробуйте создать HTML-файл из 3 строк, запросите его из браузера и проверьте заголовок. Это гарантирует отсутствие заголовков CGI или чего-либо, что мешает конфигурации вашего сервера.
<html><head><title>Some Test file</title></head>
<body>unicode test äöüÄÖÜß</body>
</html>
Продолжайте экспериментировать с конфигурацией сервера, пока этот файл не будет отправлен со charset=utf-8
спецификацией в заголовке Content-type.
Далее попробуйте минимальную программу на Perl:
#!/usr/bin/perl <-- or omit this line as you're on windows
binmode(STDOUT, ":utf8");
print qq(Content-type: text/html; charset=utf-8
<html><head><title>Some Test file</title></head>
<body>unicode test äöüÄÖÜß</body>
</html>
);
Если это работает (отправляет правильный заголовок), то все остальное, что не работает, находится в ваших библиотеках, а не в конфигурации вашего сервера.