编码错误:为什么我的中型破折号在另一台服务器上编码不同?

时间:2012-03-19 16:30:48

标签: html .htaccess encoding character-encoding

我的“破折号”字符在两台服务器上的显示方式不同。

当我访问服务器1时: -

当我访问服务器2时: -

我没有使用任何数据库连接,只是纯HTML。

以下是我的HTML文件的前4行:

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <meta charset="utf-8" />

请在这里帮助我,我看不出它有什么问题。

- 溶液 -

如下所示,我用

替换了我的短划线
&#8211;

要使服务器正确显示我的►字符,我必须在.htaccess中放入以下代码行:

AddDefaultCharset UTF-8

谢谢大家!

2 个答案:

答案 0 :(得分:5)

如果服务器发送不同的Content-Type标头,则可能会发生这种情况。当使用不同的编码信息时,完全相同的文档可能具有不同的含义。

上传文件(转换错误)时,某些内容也可能会发生变化。但在这种情况下,通常,标题问题可能解释了差异。

如果文档是UTF-8编码并且包含“ - ”(即EN DASH,U + 2013,而不是EM DASH),那么如果标题指定Content-Type: text/html;charset=utf-8则会显示OK。但是如果标题有例如windows-1252而不是utf-8,那么构成UTF-8编码表示“ - ”的三个字节,即0xE2 0x80 0x93,将被解释为每个windows-1252编码,这意味着â€。如果你真的看到,那么会发生什么有点模糊,但更重要的是修复编码问题,这可能解决问题。

查看W3C tutorial on encodings

答案 1 :(得分:1)

他们可能会接受不同的编码。在UTF-8中,您可以直接包含m-dash( - ),但如果页面作为ASCII提供,则需要将其编码为&mdash;。看看源代码,看看它使用的是什么。

我认为这就是发生的事情,因为“ - ”是多个字节长,所以它会被解释为多个ASCII字符。