.htaccess中AddCharset UTF-8对.java无效及无后缀文件charset设置问题
AddCharset 对 .java 后缀不生效的原因
AddCharset指令仅对 MIME 类型为text/开头的资源生效,会自动在这类资源的Content-Type响应头中追加指定的 charset 参数。- Apache 默认配置中,
.java后缀对应的 MIME 类型为application/x-java或application/octet-stream,不属于text/类型范畴,因此AddCharset UTF-8 .java规则会被直接忽略,不会生效。 - 该默认配置也直接导致了不同浏览器的表现差异:Firefox 会将
application类 MIME 类型判定为二进制资源直接触发下载,Chrome、Safari 即使强制预览资源,也会因为响应头未指定编码,默认使用 ISO-8859-1 解析 UTF-8 字节流,最终出现乱码。
补充说明
如果想要 AddCharset 规则对 .java 生效,可以先在 .htaccess 中为 .java 配置 text 类 MIME 映射,示例如下:
AddType text/x-java-source .java AddCharset UTF-8 .java
该方案和你使用 FilesMatch 强制设置 Content-Type 头的效果完全一致。
针对所有无后缀文件的通用 charset 配置,可以使用如下规则:
<FilesMatch "^[^.]+$"> Header set Content-Type "text/plain; charset=UTF-8" </FilesMatch>
该规则会匹配所有文件名不含 . 的资源,统一设置为 UTF-8 编码的纯文本类型。
内容的提问来源于stack exchange,提问作者njlarsson
相关产品推荐
相关产品推荐

