0

我的大脑很痛,所以我需要帮助来解决这个问题。我已经阅读了许多类似的编码问题,但我找不到任何可以帮助我解决这个特定问题的信息。

我有一个从数据库读取数据的 PHP 服务。它将字符集设置为:

mysql_set_charset('utf8', $con)

基本上它然后执行一个查询并循环通过数据库项目,如下所示:

while($row = mysql_fetch_object($result)) {
  $row->MyField1 = utf8_encode($row->MyField1);
  $row->MyField2 = utf8_encode($row->MyField2);
  ...
  $res[] = $row;
}

并以:

print json_encode($res);

然后我从 Ruby(一个 sinatra 应用程序)读取数据:

uri = URI(str)
source = Net::HTTP.get(uri)
src = JSON.parse(source)
src.each do |s|
    # Display s.MyField1 in HTML here....  HTML page is HTML5 and <meta charset="utf-8">
end

问题是我显示的字符串如下:

ALLMÃNHETENS ÃKNING

'Ã'对我来说,一些未知的角色在哪里。它应该正确地出现'Ä'在第一次出现和'Å'(瑞典语 A 带有'ring diacritic' http://en.wikipedia.org/wiki/Ring_(diacritic))。

是错误的PHP代码吗?还是 Ruby 代码?如果有人能指出我正确的方向,我将不胜感激?坦率地说,我不知道从哪里开始追逐错误。

4

1 回答 1

0

好的似乎答案在这里描述得非常准确:

http://www.i18nqa.com/debug/bug-utf-8-latin1.html

重要的是我的 PHP 脚本必须添加:

Content-type: application/json; charset=utf-8

否则,UTF-8 会将它们各自的字节解释为 ISO-8859-1 或 Windows-1252,从而导致上述行为。

重要补充:我还必须删除 PHP 脚本中的 utf8_encode() 调用,因为数据已经是 UTF-8 编码的(或者可能是 mysql_set_charset("utf8", $con) 做了那件事,我不知道) .

于 2013-10-28T09:10:55.073 回答