Веб-сервер Apache ДІЙСНО не схожий на utf-8


1

Це дійсно дратує мене, так що я сподіваюся, що хтось тут може сказати мені, що я роблю неправильно. Я працюю на веб-сервері Apache на моєму ноутбуці Windows 7 на деякий час, тепер, щоб перевірити деякі програми, які я робив у свій вільний час. Нещодавно я помітив, що символи Unicode на моїх сторінках не відображаються правильно в моєму веб-переглядачі. Я зробив те, що виявилося багато безглуздим тестуванням, і виявив, що персонажі надсилаються як правильні UTF-8, і я також додав <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> рядок у верхній частині мого html виводу, який мав на меті виправити проблему, але насправді не зробив. Потім я взяв час, щоб перевірити заголовки відповіді HTTP, і побачив, що Apache відсилає:

HTTP/1.1 200 OK
Date: Sun, 19 Jul 2015 18:18:40 GMT
Server: Apache/2.2.25 (Win32)
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

ОК, так що це виглядає досить простою проблемою. Згідно з Інтернетом, я можу це виправити, додавши AddDefaultCharset utf-8 до мого файлу httpd.conf. Таких не було AddDefaultCharset рядків у файлі в будь-якому місці, тому я додав його внизу, точно так, як це написано вище. Потім я перезапустив службу Apache і виявив, що проблема не змінилася. Отже, я перезавантажив комп'ютер, за теорією, що я, можливо, не знаю, як правильно перезапустити Apache, але він все ще не відображає символи правильно, і він все одно посилає charset=iso-8859-1 у заголовках.

Я також знайшов веб-сайт, який припустив, що щось називається Windows VirtualStore може автоматично зберігати файл конфігурації де-небудь ще тільки для f * ck зі мною, але я не вірю, що це відбувається, тому що я не можу знайти будь-які файли Apache в Каталог VirtualStore. Крім того, ви повинні бути в змозі відключити VirtualStore, прийнявши на себе папку, і я зробив це деякий час тому, тому що це не даючи мені змінити що-небудь інакше.

На жаль, я навіть не впевнений, що ще можна поглянути на цю проблему. У кого є якісь ідеї?


1
Згідно з w3.org Встановлення інформації про кодування в .htaccess тип вмісту має бути встановлено .htaccess
DavidPostill

У мене є AddDefaultCharset UTF-8 вище <IfModule mime_magic_module> у файлі httpd.conf, хоча я не думаю, що ця позиція має значення. Ви також включаєте a <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> рядок у головному розділі веб-сторінок? ISO-8859-1 - це стандартний вибір браузера.
moonpoint

@moonpoint Так, у мене є лінія http-equiv. Напевно, мав би згадати це в моєму оригінальному пості. Це було одне з кількох змін, які я зробив, щоб переконатися, що проблема не в моєму програмуванні.
Gorcq

1
@DavidPostill: розміщення типу вмісту .htaccess це обхідний шлях для спільних серверів, де немає доступу до конфігурації сервера; якщо ви запускаєте свій власний сервер, то самі конфігураційні файли сервера є значно чистішою ідеєю.
Guntram Blohm

Ви сказали "тестувати деякі програми", яку мову ви використовуєте? Чи відбувається це з звичайними HTML-файлами, або просто з генерованими файлами? Наприклад, якщо ви використовуєте perl і модуль CGI, print header() робить perl надсиланням заголовка iso-8859 до apache, який перекриває будь-яку конфігурацію; потрібно використовувати print header (-charset => 'UTF-8');.
Guntram Blohm

Відповіді:


1

Спробуйте створити 3-рядковий HTML-файл, запитати його у браузері та перевірити заголовок. Це гарантує відсутність заголовків 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>
);

Якщо це працює (надсилає правильний заголовок), то все, що не працює, знаходиться у ваших бібліотеках, а не у конфігурації сервера.


Лайно. Ну, це було нерозумно. Як тільки я побачила вашу тестову програму perl, я згадала, що моя також відправляє рядок Content-type як мій перший оператор друку. Вона вказує iso-8859-1. Він сидів там на початку мого сценарію вже кілька років, і я забув про це. Доданий тег & lt; meta додався до нього і суперечив йому. Я змінив його, і тепер все працює. Спасибі за вашу допомогу.
Gorcq
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.