我的网站有页面和其他内容采用 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
。如何为这些 URI 获取可靠的 UTF-8 编码?
答案1
不会为 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
首先 (添加默认字符集) 将设置text/plain
和text/html
资源的字符集。
第二 (添加字符集) 需要 mod_mime,并将根据文件扩展名设置其他类型的字符集。Javascript 文件以内容类型发送application/javascript
,CSS 文件以内容类型发送,text/css
因此不会被 AddDefaultCharset 设置拾取。.htm 和 .html 文件实际上不需要包含在其中,因为它们将被默认拾取,但明确指定也无妨。
答案2
我通过在“apache2.conf”中添加以下行解决了这个问题:
AddType text/plain .yml
AddDefaultCharset utf-8
写这个答案的时候已经过去了一段时间。最近的 Apache 安装可能已将 utf-8 设置为默认值。
答案3
扩展答案由@Barry-Pollard 编写,由于AddCharset
需要mod_mime
(或在许多配置中,默认情况下会加载mime_module
),我们最好使用以下代码。使用可AddCharset
确保如果因任何原因未加载,IfModule
apache 不会抛出错误。mime_module
<IfModule mime_module>
AddCharset UTF-8 .js .css
</IfModule>