2009-07-13 65 views
0

我发现我的Rails应用程序返回到位双引号和某些破折号,它返回一个问号character--mysql的编码问题

有没有一种方法来更新表,并与原有的替换它们字符?

谢谢!

阿米

+0

字符编码? UTF-8? – 2009-07-13 16:48:49

+0

是的。http内容标题指定UTF-8。我想知道是否有办法重写它。这篇文章(http://www.validome.org/lang/en/errors/HTML-CHARSET)说http报头具有更高的优先级。 – Grnbeagle 2009-07-15 17:12:30

回答

0
update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]'); 

应该做的伎俩。首先对测试数据库运行,直到你知道它不会破坏任何东西。

使用此声明需要您自担风险。

+0

感谢您的建议。查找和替换的一个问题是我不确定要找到哪个字符串。从mysql控制台,他们都显示为“?” (包括那些特殊字符和合法的问号字符)我希望有一些我可以调整的编码设置。任何建议表示赞赏。 – Grnbeagle 2009-07-13 17:31:13

1

这些将是 “智能引号” 和EM-或EN-破折号(“ ” ‘ ’ — –)。微软应用程序倾向于使用那些代替完美的ASCII等价物,引号,撇号和连字符的应用程序。他们还将文本保存为windows-1252,这是ISO-8859-1字符编码的微软扩展,其中包括用于那些花式字符的映射,以替代128..159范围内的(确定无用的)控制字符。

因此,当你需要使用windows-1252的时候,你需要解码文本为ISO-8859-1或UTF-8甚至是ASCII码(或者让系统默认为其中一种编码) 。有关真实问题的更多背景信息,请参见google“demoronizer”或“ASCII Dammit”。

+0

感谢您的信息。正如你所建议的,我查了一下windows-1252编码的更多信息。似乎http响应头(指定为UTF-8)优先于元字符集,所以我无法改变ad-hoc编码。这是有关该主题的信息:http://www.cs.tut.fi/~jkorpela/www/windows-chars.html – Grnbeagle 2009-07-15 17:10:07

1

这些问号指示的结果显示在环境的编码无效字节。

这些天环境将是UTF-8。

如果您运行MySQL控制台应用程序,运行以下命令,当你第一次连接到告诉MySQL服务器返回的所有结果以UTF-8 当前连接

SET NAMES utf8; 

在轨,你可以让ActiveRecord在你的database.yml文件中加入“encoding:utf8”来打开一个db连接。您还应该确保您的网络服务器(apahce/nginx/etc)发送utf-8 HTTP标头,并确保您的HTML文件具有Content-Type元标记。

这可能会损坏存储在数据库中的字节,这不会有帮助。如果是这样的话,那么你就会乐此不疲地尝试清理它:)

+0

有同样的问题...添加编码:utf8到database.yml使 字符正确显示。谢谢,我忘记了:) – foz 2010-03-19 13:30:53