我的大脑疼,所以我需要帮助来解决这个问题。我已经阅读了许多类似的编码问题,但我找不到任何可以帮助我解决这个问题的信息。
我有一个从数据库中读取数据的PHP服务。它将字符集设置为:
mysql_set_charset('utf8', $con)
然后它基本上执行一个查询并通过这样的db项循环:
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中有'变音符号'http://en.wikipedia.org/wiki/Ring_(diacritic))。
PHP代码是错误的吗?还是Ruby代码?如果有人能指出我正确的方向,我将非常感激?坦率地说,我不知道从哪里开始追逐虫子。
答案 0 :(得分: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,完全导致上述bevahiour。
重要补充:我还必须删除PHP脚本中的utf8_encode()调用,因为数据已经是UTF-8编码(或者mysql_set_charset(“utf8”,$ con)做了那件事,我不知道知道)。