【发布时间】:2009-07-13 15:54:31
【问题描述】:
我注意到我的 Rails 应用程序返回代替双引号和某些破折号,它返回一个问号字符--
有没有办法更新表格并用原始字符替换它们?
谢谢!
阿米
【问题讨论】:
-
Yes.. http 内容标头指定 UTF-8。我想知道是否有办法覆盖它。这篇文章 (validome.org/lang/en/errors/HTML-CHARSET) 说 http header 有更高的优先级。
我注意到我的 Rails 应用程序返回代替双引号和某些破折号,它返回一个问号字符--
有没有办法更新表格并用原始字符替换它们?
谢谢!
阿米
【问题讨论】:
这些将是“智能引号”和 em- 或 en-dashes (“ ” ‘ ’ — – )。 Microsoft 应用程序倾向于使用它们来代替它们完美的 ASCII 等效项、引号、撇号和连字符。他们还将文本保存为 windows-1252,这是 ISO-8859-1 字符编码的 Microsoft 扩展,其中包括对那些花哨字符的映射,以代替 128..159 范围内的(公认无用的)控制字符。
因此,当您应该使用 windows-1252 时,直接的问题是您将文本解码为 ISO-8859-1 或 UTF-8 甚至 ASCII(或让系统默认为其中一种编码)。有关真正问题的更多背景信息,请谷歌“demoronizer”或“ASCII Dammit”。
【讨论】:
这些问号表示结果显示环境的编码字节无效。
这些天大多数环境将是 utf-8。
如果您正在运行 mysql 控制台应用程序,请在首次连接时运行以下命令,以告诉 MySQL 服务器以 utf-8 格式返回 当前连接的所有结果:
SET NAMES utf8;
在 Rails 中,您可以在 ActiveRecord 打开数据库连接时运行此命令,方法是在您的 database.yml 文件中添加“encoding: utf8”。您还应该确保您的网络服务器(apahce/nginx/etc)正在发送 utf-8 HTTP 标头,并且您的 HTML 文件具有 Content-Type 元标记。
您的数据库中可能存储了损坏的字节,这无济于事。如果是这样的话,你就会进入一个有趣的世界试图清理它:)
【讨论】:
update [table_name] set [field_name] =
replace([field_name],'[string_to_find]','[string_to_replace]');
应该做的伎俩。始终首先针对测试数据库运行,直到您知道它不会破坏任何东西。
使用此声明需要您自担风险。
【讨论】: