gpt4 book ai didi

ruby - 类别特殊字符的 Jekyll 编码名称

转载 作者:数据小太阳 更新时间:2023-10-29 08:07:04 26 4
gpt4 key购买 nike

我的 Jekyll 安装曾经可以正常工作。自更新以来,我遇到了一个问题,即 URL 包含带有一些特殊字符的标签名称。

我现在在尝试访问其中包含特殊字符的 URL 时收到错误消息,例如 http://127.0.0.1:4000/tag/Actualit%C3%A9%20europ%C3%A9e​​nne/,其中 Actualité européenne 是类别的名称。

错误消息是不兼容的字符编码:UTF-8 和ASCII-8BIT_posts 目录中的所有文件都是 utf-8。

这是堆栈跟踪:

[2017-01-30 17:39:09] ERROR Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT /usr/lib/ruby/2.1.0/webrick/httpservlet/filehandler.rb:313:in 'set_filename' /usr/lib/ruby/2.1.0/webrick/httpservlet/filehandler.rb:282:in 'exec_handler' /usr/lib/ruby/2.1.0/webrick/httpservlet/filehandler.rb:217:in 'do_GET' /var/lib/gems/2.1.0/gems/jekyll-3.4.0/lib/jekyll/commands/serve/servlet.rb:30:in 'do_GET' /usr/lib/ruby/2.1.0/webrick/httpservlet/abstract.rb:106:in 'service' /usr/lib/ruby/2.1.0/webrick/httpservlet/filehandler.rb:213:in 'service' /usr/lib/ruby/2.1.0/webrick/httpserver.rb:138:in 'service' /usr/lib/ruby/2.1.0/webrick/httpserver.rb:94:in 'run' /usr/lib/ruby/2.1.0/webrick/server.rb:295:in 'block in start_thread'

[2017-01-30 17:41:59] ERROR Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT /usr/lib/ruby/2.1.0/webrick/httpservlet/filehandler.rb:313:in 'set_filename' /usr/lib/ruby/2.1.0/webrick/httpservlet/filehandler.rb:282:in 'exec_handler' /usr/lib/ruby/2.1.0/webrick/httpservlet/filehandler.rb:217:in 'do_GET' /var/lib/gems/2.1.0/gems/jekyll-3.4.0/lib/jekyll/commands/serve/servlet.rb:30:in 'do_GET' /usr/lib/ruby/2.1.0/webrick/httpservlet/abstract.rb:106:in 'service' /usr/lib/ruby/2.1.0/webrick/httpservlet/filehandler.rb:213:in 'service' /usr/lib/ruby/2.1.0/webrick/httpserver.rb:138:in 'service' /usr/lib/ruby/2.1.0/webrick/httpserver.rb:94:in 'run' /usr/lib/ruby/2.1.0/webrick/server.rb:295:in 'block in start_thread'

我已经重命名了 _posts 中的所有文件以删除 filenames 中的特殊字符,但仍然不起作用。我不想重命名标签。

最佳答案

默认情况下,所有页面都编码为“utf-8”。但您可以在 config.yml 中覆盖它:

encoding: ENCODING 

但 jekyll 似乎不能很好地工作(直到现在:2017 年 1 月),unicode 没有英文字符,请参阅这个类似的问题 Slugify a string doesn't seem to work on Unicode/Swedish letters #4623 .如果您不将类别放在 ' '

中,空间也会导致一个小问题

解决方法是在将“类别”集成到 url 之前使用 generator 明确地对其进行 slugify。 , 与:

slug = category.strip.downcase.gsub(' ', '-').gsub(/[^\w-]/, '') # categories slugiffier  
// use this slug as the category id

上面的 slugifier 只是小写,用 - 替换空格,并删除所有非 ascii 字母,所以你需要在最后一个 .gsub(/[^\w-]/, '') 替换为:

é è ê -> e
à â -> a
...

更新

在阅读 GitHub 列表中的旧 jekyll 问题以对该问题实现“修复”时,我发现了这个 detailed solution @david-jacquel 于 2014 年发布:

This needs to change the way Jekyll generates urls for posts. This can be done with a plugin.

# _plugins/post.rb
module Jekyll

class Post

# override post method in order to return categories names as slug
# instead of strings
#
# An url for a post with category "category with space" will be in
# slugified form : /category-with-space
# instead of url encoded form : /category%20with%20space
#
# @see utils.slugify
def url_placeholders
{
:year => date.strftime("%Y"),
:month => date.strftime("%m"),
:day => date.strftime("%d"),
:title => slug,
:i_day => date.strftime("%-d"),
:i_month => date.strftime("%-m"),
:categories => (categories || []).map { |c| Utils.slugify(c) }.join('/'),
:short_month => date.strftime("%b"),
:short_year => date.strftime("%y"),
:y_day => date.strftime("%j"),
:output_ext => output_ext
}
end

end

end

-- David Jacquel on Jekyll/jekyll-help/issues/129#

这将解决空间问题,并给出解决编码名称的起点

关于ruby - 类别特殊字符的 Jekyll 编码名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41941320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com