在表单字段中,用户输入了以下文本:
Número Telefónico
尽管文本在表单字段中表现良好(即使在刷新后),但当使用<%= @foo.text %>
:在不同页面上输出时,相同的文本(提交并保存到数据库)看起来是这样的
Néºmero Telefé³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模板引擎渲染时,文本才会出现问题。我将在Liquid的Github上发布一个问题,并将用任何新信息更新这个问题(希望能得到答案)。
更新2
以下是相关的Github问题。
真正的罪魁祸首最终是Nokogiri,而不是Liquid。Nokogiri用于解析和操作最终将通过Liquid的HTML。然而,在Nokogiri使用HTML的时候,它混淆了编码(尤其是在使用doc.replace
时),从而混淆了特殊字符。
这个特定问题的相关问题和答案(我最终使用了下面第二个链接的解决方案):
- 使用Nokogiri替换时的编码问题
- https://github.com/sparklemotion/nokogiri/issues/587