Encoding::UndefinedConversionError "\xC2" 从 ASCII-8BIT 到 UTF-8 with redcarpet
Encoding::UndefinedConversionError "\xC2" from ASCII-8BIT to UTF-8 with redcarpet
我正在使用 redcarpet gem 将一些降价文本呈现为 html,部分降价文本是用户插入的,他们输入了一个完全有效的特殊字符(£
), 但现在渲染它时我得到一个: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 保存到文件时发生,在其他地方我正确地使用相同的降价助手将文本呈现给浏览器,那里没有问题。
反之亦然,在将降价代码保存到数据库之前清理降价代码,并将任何特殊字符替换为相应的 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
没用
我也试过了(这里推荐:Using ERB in Markdown with Redcarpet):
<%= markdown(extra_clause.text).html_safe %>
也没用。
我该如何解决?
最后我通过将 force_encoding("UFT-8")
添加到 html
解决了这个问题
像这样:
f.write html.force_encoding("UTF-8")
它修复了它。
我正在使用 redcarpet gem 将一些降价文本呈现为 html,部分降价文本是用户插入的,他们输入了一个完全有效的特殊字符(£
), 但现在渲染它时我得到一个: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 保存到文件时发生,在其他地方我正确地使用相同的降价助手将文本呈现给浏览器,那里没有问题。
反之亦然,在将降价代码保存到数据库之前清理降价代码,并将任何特殊字符替换为相应的 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
没用
我也试过了(这里推荐:Using ERB in Markdown with Redcarpet):
<%= markdown(extra_clause.text).html_safe %>
也没用。
我该如何解决?
最后我通过将 force_encoding("UFT-8")
添加到 html
像这样:
f.write html.force_encoding("UTF-8")
它修复了它。