显示重音字符的问题,适用于其他数据库

时间:2013-07-05 19:02:58

标签: mysql character-encoding mamp

我有三个数据库环境,MAMP,测试服务器,实际服务器。测试服务器只是一个不使用其数据库的旧站点。

在MAMP和测试服务器上,我需要显示的重音字母显示正常(即字体不是问题)í á ñ,但是在实际的服务器上我得到那些可爱的黑色问号方块 。

所以我猜测它是charset并且调查它但是所有的DB都有相同的charset latin1_swedish_ci

我使用in this post描述的方法检查了设置,然后在SQL中运行SET NAMES 'utf-8';,但问题仍然存在。

我还更改了数据库和所有单个表上的字符集,但这似乎没有效果。

我能够影响浏览器解释文本的方式的唯一方法是将META更改为latin1,实际上我正在使用ini_set('default_charset', 'utf-8');。这里的问题是它用各种随机符号替换 。

有人可以帮我确定原因吗?我没有想法。

我正在使用SublimeText2,这可能是问题吗?我尝试用UTF编码保存它,这也没有太大作用。

1 个答案:

答案 0 :(得分:2)

如果你看到 UNICODE REPLACEMENT CHARACTER,那意味着数据被解释为 UTF-8(或其他Unicode编码),但不是实际上是有效的UTF-8 。覆盖浏览器以解释其他编码中的数据(查看菜单→大多数浏览器中的编码),以确定实际编码的数据。一旦你想到了这一点:

  1. 更改数据的编码以匹配声明的编码;通过设置数据库连接编码(mysql_set_charsetSET NAMES ...或类似的,具体取决于您的API)来完成此操作。由于MySQL将编码转换为连接编码,因此各列的整理和编码无关紧要。
  2. 通过设置正确的Content-Type HTTP标头和/或<meta>标签来更改声明的编码; ini_set('default_charset', ...)会这样做,但Web服务器可能会覆盖它。使用浏览器工具检查实际的HTTP标头。
  3. 首先确保数据库中的数据确实没问题且不是垃圾。如果您需要更多信息,请参阅What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With TextHandling Unicode Front To Back In A Web App