1

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

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

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

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

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

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

有人可以帮我确定原因吗?我没主意了。

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

4

1 回答 1

2

如果您看到 �UNICODE REPLACEMENT CHARACTER,这意味着数据被解释为UTF-8(或其他 Unicode 编码),但实际上不是有效的 UTF-8。覆盖您的浏览器以解释其他编码中的数据(在大多数浏览器中查看菜单 → 编码),以找出数据实际编码的内容。一旦您弄清楚了:

  1. 更改数据的编码以匹配声明的编码;通过设置数据库连接编码(或类似的,取决于您的 API)来做到这mysql_set_charset一点SET NAMES ...。各个列的排序规则和编码无关紧要,因为 MySQL 将编码转换为连接编码。
  2. Content-Type通过设置正确的HTTP 标头和/或<meta>标记来更改声明的编码;ini_set('default_charset', ...)会这样做,但网络服务器可能会覆盖它。使用浏览器工具检查实际的 HTTP 标头。

首先确保您的数据库中的数据实际上是好的,并且不是垃圾。如果您需要更多信息,请参阅关于编码和字符集以使用文本以及在 Web 应用程序中从头到尾处理 Unicode ,每个程序员都绝对、肯定需要了解的内容。

于 2013-07-05T20:55:57.950 回答