如何在 Apache 中配置 UTF-8 Content-Type 标头?

Bre*_*ent 1 http-headers encoding apache-2.4

我的网站有 UTF-8 编码的页面和其他内容。对于 HTML,在元标记中设置编码是没有问题的。但是,我也有未正确显示的 UTF-8 编码的原始文本文件,例如?显示为×. 我曾考虑在此类文件的开头添加一个字节顺序标记,但我不想这样做,因为它们并不总是得到很好的支持。我按照this other question中的说明进行操作,但没有效果。这是 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
Run Code Online (Sandbox Code Playgroud)

我希望看到Content-Type: text/plain; charset=utf-8。如何为这些 URI 获得可靠的 UTF-8 编码?

Bar*_*ard 6

对于 304 Modified 响应,不发送 Content-Type,因为此类响应没有内容正文。

查看 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
Run Code Online (Sandbox Code Playgroud)

第(AddDefaultCharset)将设置的字符集text/plaintext/html资源。

第二个(AddCharset)需要 mod_mime 并将根据文件扩展名设置其他类型的字符集。Javascript 文件的内容类型为application/javascript,CSS 文件的内容类型为 ,text/css因此不会被 AddDefaultCharset 设置接收。.htm 和 .html 文件并不真正需要在此,因为默认情况下会被选中,但没有明确的危害。


Bre*_*ent 5

我通过将这些行添加到“apache2.conf”来解决这个问题:

AddType text/plain .yml
AddDefaultCharset utf-8
Run Code Online (Sandbox Code Playgroud)

这是写这个答案的前一段时间了。最近安装的 Apache 可能已将 utf-8 设置为默认值。