【发布时间】:2011-11-21 04:14:02
【问题描述】:
UTF-8 在通过 /web-app 通过 tomcat 提供的 .html 文件上被破坏。如果我直接使用file:/// 打开文件,它会呈现正常。如果我在运行应用程序期间查看文件,它看起来很好。但是,当我作为战争部署时,UTF-8 字符会出现乱码。
响应的内容类型似乎正确...
Content-Type: text/html;charset=UTF-8,HTML 文件本身甚至似乎有正确的元声明。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
对于默认的 URIEncoding,Tomcat 的连接器设置为“UTF-8”,所以我认为这也不是问题。普惠制表现良好;只有 HTML 文件有问题。
这里会发生什么?
编辑:
使用 firefox,我保存了原始 HTML 文件的本地副本和直接从file:///... 读取的文件以进行比较。文件之间的唯一区别在于Tomcat版本将所有非ascii字符替换为:
�
根据您使用的编辑器,哪个呈现为空方块或问号。字符本身似乎是 EF BF BD,它替换了 all 非 ascii 字符。不知何故,在提供文件时,tomcat 或 grails 只是踩在 unicode 字节上。 可以做什么?
编辑编辑: 即使这个w3 test file 与我的文件具有相同的行为,表明我的文件可能很好,而且Tomcat/Grails 确实有问题。
【问题讨论】:
-
EF BF BD表示UTF-8中的任何无效编码;这正是您所期望的,例如iso 8859-1 编码文件被强制为 utf-8。 -
当我使用亚洲字符运行时,我看到了相同的结果。中文在run-app下工作,在tomcat下失败。此外,所有编辑人员都确认源 HTML 文件是没有 BOM 的 UTF8。
-
w3 中的 utf-8 测试文件也被压缩。我将用它来更新我的问题。
标签: tomcat grails utf-8 mime-types content-type