在表单字段中,用户输入了以下文本:
NúmeroTelefónico
尽管文本在表单字段本身中呈现正常(即使在刷新之后),但在使用<%= @foo.text %>
的其他页面上输出时,相同的文本(提交并保存到数据库)看起来像这样:
NúmeroTelefónico
(我认为)我已确保一致使用UTF-8编码:
irb(main):014:0> "Número Telefónico".encoding
=> #<Encoding:UTF-8>
通过psql:
=> SHOW SERVER_ENCODING;
server_encoding
-----------------
UTF8
在HTML方面:
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
但是这些角色仍然无法正常渲染。如果我能提供更多信息,请告诉我。
只有通过Liquid templating engine呈现时,文字才会被搞砸。我将在Liquid的Github上发布一个问题,并将用任何新信息更新这个问题(希望答案)。
答案 0 :(得分:0)
真正的罪魁祸首最终是Nokogiri,而不是Liquid。 Nokogiri用于解析和操纵最终将通过Liquid的HTML。然而,在Nokogiri的HTML时代,它使编码混乱(特别是在使用doc.replace
时),从而搞砸了特殊字符。
此特定问题的相关问题和答案(我最终使用了以下第二个链接中的解决方案):