提问人:Don Giulio 提问时间:2/16/2021 更新时间:2/17/2021 访问量:1292
Encoding::UndefinedConversionError “\xC2” 从 ASCII-8BIT 到 UTF-8 with redcarpet
Encoding::UndefinedConversionError "\xC2" from ASCII-8BIT to UTF-8 with redcarpet
问:
我正在使用 redcarpet gem 将一些 markdown 文本渲染为 html,markdown 的一部分是用户插入的,他们输入了一个完全有效的特殊字符 (),但现在在渲染它时我得到一个:£
Encoding::UndefinedConversionError "\xC2" from ASCII-8BIT to UTF-8
我知道这是 £ 符号,因为如果我在文本中替换它进行渲染,那么它就可以了。但他们可能会插入其他特殊字符。
我不确定如何处理这个问题,这是我构建 html 的代码:
def generate_document
temp_file_service = TempFileService.new
path = temp_file_service.path
template_url = TenantConfig.get('DEPOSIT_GUIDE_TEMPLATE') || DEFAULT_DOC
template = open(template_url, 'rb', &:read)
html = ERB.new(template).result(binding)
File.open( path, 'w') do |f|
f.write html
end
File.new(path, 'r')
end
错误在线上升f.write
这是我的html.erb:
<%= markdown(clause.text) %>
这是帮助者:
def markdown(text)
Redcarpet::Markdown.new(Redcarpet::Render::HTML).render(text)
end
请注意,编码问题仅在将 html 保存到文件时才会发生,在其他地方我正确地使用相同的 Markdown 帮助程序将文本呈现到浏览器,那里没有问题。
它也可以以另一种方式工作,在将 Markdown 代码保存到 DB 之前清理它,并将任何特殊字符替换为相应的 html 代码(例如。 成为£
£
)
我尝试了before_save回调(如此处建议: Encoding::UndefinedConversionError: “\xC2” from ASCII-8BIT to UTF-8) :
before_save :convert_text
private
def convert_text
self.text = self.text.force_encoding("utf-8")
end
这不起作用
我也尝试过(正如这里推荐的那样:在 Markdown 中使用 ERB 和 Redcarpet):
<%= markdown(extra_clause.text).html_safe %>
这也行不通。
我将如何解决这两种方式?
答:
2赞
Don Giulio
2/17/2021
#1
最后,我通过添加到html解决了这个问题force_encoding("UFT-8")
喜欢这个:
f.write html.force_encoding("UTF-8")
它修好了。
评论
0赞
stevec
7/11/2023
救星!(谢谢!
评论
&#x