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

时间:2017-01-30 16:56:23

标签: ruby encoding utf-8 jekyll

我的Jekyll安装曾经工作过。自更新以来,我遇到了包含标记名称的URL的问题,这些标记名称包含一些特殊字符。

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

错误消息为incompatible character encodings: UTF-8 and ASCII-8BIT_posts目录中的所有文件都是utf-8。

这是堆栈跟踪:

  

[2017-01-30 17:39:09]错误编码::兼容性错误:不兼容   字符编码:UTF-8和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   '服务'     /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'start in start_thread'

     

[2017-01-30 17:41:59] ERROR Encoding :: CompatibilityError:不兼容   字符编码:UTF-8和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   '服务'     /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'start in start_thread'

我已重命名_posts中的所有文件以删除文件名中的特殊字符,但仍然无效。我不想重命名标签。

1 个答案:

答案 0 :(得分:1)

默认情况下,所有页面都被编码为'utf-8'。但您可以在config.yml

中覆盖此内容
encoding: ENCODING 

但似乎jekyll效果不佳(直到现在:jan-2017),unicode没有英文字符,请看这个类似的问题Slugify a string doesn't seem to work on Unicode/Swedish letters #4623。如果你不把类别放在' '

中,那么这个空间也会引起一些问题

修复你的“Catégories”,然后使用generatorurl整合到slug = category.strip.downcase.gsub(' ', '-').gsub(/[^\w-]/, '') # categories slugiffier // use this slug as the category id 中,然后执行以下操作:

gsub

上面的slugifier只是大小写,用 - 替换空格,并删除所有非ascii字母,所以你需要在最后一个.gsub(/[^\w-]/, '')之前添加其他替换é è ê -> e à â -> a ... 来替换:

# _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

更新

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

  

这需要改变Jekyll为帖子生成网址的方式。这个可以   用插件完成。

select a.*, b.i 
from TableA a left outer join TableB b on a.a = b.a and a.b = b.b ...
     

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

上的David Jacquel

将解决空间问题,并提供一个起点来解决编码名称