На моем веб-сайте есть страницы и другой контент в кодировке UTF-8. Для HTML установка кодировки в метатеге не проблема. Однако у меня также есть необработанные текстовые файлы с кодировкой UTF-8, которые отображаются некорректно, например ⨯
появляется как ×
. Я подумал о добавлении отметки порядка байтов в начале таких файлов, но я бы предпочел не делать этого, поскольку они не всегда хорошо поддерживаются. Я выполнил инструкции в этот другой вопрос, но это не повлияло. Это заголовок HTTP-ответа:
HTTP/1.1 200 OK
Date: Sat, 12 Aug 2017 15:41:04 GMT
Server: Apache/2.4.10 (Debian)
Last-Modified: Wed, 09 Aug 2017 19:24:33 GMT
ETag: "c04c-5565707a34966"
Accept-Ranges: bytes
Content-Length: 49228
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Я надеялся увидеть Content-Type: text/plain; charset=utf-8
. Как я могу получить надежную кодировку UTF-8 для этих URI?
Content-Type не отправляется для 304 измененных ответов, потому что для такого ответа нет тела содержимого.
Посмотрите на тип ответа 200, и вы должны это увидеть. Используйте Ctrl + F5 для принудительного обновления и ответа 200 вместо повторной проверки кэшированного ответа с ответом 304.
Затем вы обновили свой вопрос, включив в него ответ 200, но я ожидаю, что всегда будет Content-Type: text/plain
заголовок или эквивалент (даже если набор символов не включен), но этого нет в вашем примере, поэтому не уверены, что у вас есть все подробности в этом?
В любом случае, правильный способ установить это - добавить в конфигурацию apache следующее:
#Set the correct Char set so don't need to set it per page.
AddDefaultCharset utf-8
#for css, js, etc.
AddCharset utf-8 .htm .html .js .css
Первый (AddDefaultCharset) установит кодировку для text/plain
и text/html
Ресурсы.
Второй (AddCharset) требует mod_mime и устанавливает кодировку для других типов в зависимости от расширения файла. Файлы Javascript отправляются с типом содержимого application/javascript
и файлы CSS отправляются с типом содержимого text/css
поэтому не подбираются параметром AddDefaultCharset. Файлы .htm и .html на самом деле не обязательно должны быть в нем, поскольку они будут выбраны по умолчанию, но явного вреда не будет.
Я исправил эту проблему, добавив следующие строки в apache2.conf:
AddType text/plain .yml
AddDefaultCharset utf-8
Это было некоторое время назад, когда я писал этот ответ. В последних установках Apache по умолчанию может быть уже установлен utf-8.