【发布时间】:2016-11-05 13:59:58
【问题描述】:
我的服务器上有一个生成 GPX(一种 XML)文件的进程。由于某些重音字符,该文件使用 UTF-8 编码,并在头部指定:
<?xml version="1.0" encoding="UTF-8"?>
此外,在 Apache 服务器上,我添加了 AddType 和 AddEncoding 指令,因此如果您执行 HEAD 命令或检查 Chrome 开发人员工具中的标头,您会看到
Content-Type: application/octet-stream; charset=utf-8
但是,如果您在下载后对其使用file 命令,它会报告:
# file 9f90063f.gpx
9f90063f.gpx: XML 1.0 document text, ISO-8859 text
这给使用文件的人带来了问题,因为他们报告说他们提供文件的程序变得混乱。如何使文件下载为 utf-8 而不是 ISO-8859?
【问题讨论】:
-
1)
application/octet-stream暗示二进制,因此编码没有意义。如果是 XML,您应该声明某种 XML 2)file是否正确?声明的编码当然与实际的编码无关。 -
我不知道
file究竟是如何工作的,但如果您的文件不包含任何重音字符(即前 128 个 ASCII 位置之外的字符),它将无法与单字节编码区分文件。请记住,UTF-8 是灵活的,因为只有前 128 个字符之外的字符是两个字节长,如果不解释为 UTF-8 会导致问题。也许这就是“问题”(从技术上讲不是问题)。你能确认带有重音字符的文件会导致相同的file输出吗? -
1) 如果我指定
application/xml,Chrome 会尝试显示它而不是下载它。我错过了什么让它下载吗? -
2) 有一个名为 EasyGPX 的第三方程序显然对这些文件有问题,因为它认为它们是 ISO-8559 而不是 UTF-8。我无权访问该程序,所以我不知道究竟是什么问题。
-
您可以添加
Content-Disposition: attachment; filename="9f90063f.gpx"标头。但是如果要下载,为什么还要Content-Type才能准确呢?
标签: apache utf-8 character-encoding