为什么UTF-8编码的字符仅在远程计算机上无法正确显示

时间:2013-09-19 15:33:11

标签: html tomcat utf-8

当我查看这个物理编码为UTF-8且在我的电脑上使用指定为字符集的UTF-8(使用firefox)的网页时,它不会显示需要正确编码多个字节的字符,例如ö在Björk,请点击链接,然后打开B部分看看我的意思

http://www.jthink.net/songkong/reports/FixSongsReport00084/FixSongsReport00084_index.html

(该页面使用jakarta-tomcat托管在linux服务器上)

然而,当我的硬盘存储为文件时,原始文件在Firefox中显示完全正常。我甚至将文件从远程站点复制回我的本地PC,以确保文件相同,但仍然可以显示。

那怎么会在网站上显示不好,这可能是一个tomcat问题吗?

修改 在第一个答案的评论中,它说我需要确保我需要正确设置响应编码,我该怎么做 - html页面不是由代码生成的tomcat只是按提供的方式提供页面

注意我不要将uri参数解析为utf8,并且我不希望我创建的jsp页面编码为UTF8,这些作为ISO-8859-1罚款,如果我更改它们可能会中断。我只想将.html页面显示为UTF8,并且仅针对此应用程序,我在webapps文件夹中有多个应用程序,我使用的是Tomcat 7

修改

正如下面的答案所示,我已添加到我的web.xml文件

 <filter>
    <filter-name>CharacterEncoding</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<mime-mapping>
  <extension>html</extension>
  <mime-type>text/html;charset=UTF-8</mime-type>
</mime-mapping>

和那种工作,网址现在正确显示,但链接不起作用。

当我查看源代码时,似乎正在使用正确的链接,但错误消息将其显示为扩展符号而不是UTF8

她的整个报告,所以你可以点击左侧的链接,在右侧看到结果

http://www.jthink.net/songkong/reports/FixSongsReport00084/FixSongsReport00084.html

即使我复制链接并粘贴它也不起作用,因为链接似乎被粘贴是错误的,虽然它然后纠正自己

1 个答案:

答案 0 :(得分:6)

您的页面正在返回此标题:

  

的Content-Type:text / html的;字符集= <强> ISO-8859-1

但您的网页采用UTF-8编码。

您可以按照此主题查看如何更改响应标头:

Tomcat 7.0.35 set HTTP response header Content-Type charset for static HTML files

<强> [编辑]

第二个问题涉及您的服务器希望编码的网址编码。

由于它们将使用utf-8进行编码,您只需使用以下命令更新tomcat配置:

<Connector port="<whatever>" URIEncoding="UTF-8"/>

但我强烈建议不要在你的网址和html文件名中使用这种字符。这里涉及的内容更多,因为用户在服务器启动时使用的编码......以及您需要注意的更多调整。只是避免使用这些字符会让你远离这些问题。

<强> [/ EDIT]

希望它有所帮助。