Meta-Interpretation

Code, better explained.

Liquid Error About Regexp Match When Using Octopress-tagcloud

| Comments

Octopress插件:octopress-tagcloud相当nice,不过在使用的时候,若是blog整体采用了非ascii码的编码格式(比如utf-8)就会出现类似这样的错误:

Liquid error: incompatible encoding regexp match (ascii-8bit regexp with utf-8 string)

其实是由于octopress-tagcloud的插件文件:plugins/tag_cloud.rb文件本身是ascii编码所致:

$ chardet tag_cloud.rb
tag_cloud.rb: ascii (confidence: 1.00)

tag_cloud.rb中很多地方用到了ruby的正则表达式,而ruby的正则表达式在匹配的时候,默认是按照“代码源文件”的编码格式(在这里是ascii)进行匹配的,而若我的blog是utf-8编码的话就会出现上述错误。

解决办法有二:

  1. tag_cloud.rb转成utf-8…
  2. 更改tag_cloud.rb中所有的正则表达式声明,加上u选项(根据这里的说明,u的意思就是以utf-8编码格式来进行匹配),即,若原正则式是:/regexp/, 则改成:/regexp/u

这里是我改好的tag_cloud.rb

Comments