windows下git bash中执行jekyll --server出错,编码问题

六只 发布于 2012/02/01 11:48
阅读 3K+
收藏 4

错误如下:

Building site: c:/Documents and Settings/Administrator/congmo.github.com -> c:/Documents and Settings/Administrator/congmo.github.com/_site
c:/Ruby192/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/convertible.rb:29:in `read_yaml': invalid byte sequence in GBK (ArgumentError)
        from c:/Ruby192/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/page.rb:24:in `initialize'
        from c:/Ruby192/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:140:in `new'
        from c:/Ruby192/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:140:in `block in read_directories'
        from c:/Ruby192/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:130:in `each'
        from c:/Ruby192/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:130:in `read_directories'
        from c:/Ruby192/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:98:in `read'
        from c:/Ruby192/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:38:in `process'
        from c:/Ruby192/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/bin/jekyll:250:in `<top (required)>'
        from c:/Ruby192/bin/jekyll:19:in `load'
        from c:/Ruby192/bin/jekyll:19:in `<main>'

不知道怎么去改,请大家指点下。谢谢了。

加载中
1
六只
六只

终于让我搜到了,这样解决的:

self.content = File.read(File.join(base, name), :encoding => "utf-8")

详细请见:https://github.com/imathis/octopress/issues/232

 

 

0
Rubyfans
Rubyfans
可以尝试:
把 jekyll的配置文件保存为UTF-8格式,然后在文件最上面加上
# coding: utf-8 

六只
六只
不行,还是那个错误。 另外,指定编码好像用:#encoding:utf-8。 对ruby了解不多。嘿嘿。 谢谢啦。
0
六只
六只
大家还有其他的建议吗?
0
hm
hm

@六只: self.content = File.read(File.join(base, name), :encoding => "utf-8")

这个是——config.yml里面么?

0
hm
hm
哈哈 懂了 谢谢LZ 真的帮到很大忙!昨天弄了一整天啊 终于搞定了
六只
六只
刚看到,帮到了就好。嘿嘿。我也是搜了大把大把的资料才找到的,废了不少劲。
0
Wi$h
Wi$h
感谢,解决了
六只
六只
很好。嘿嘿。
0
N
NNekle
将 convertible.rb 的第27行改为:
self.content = File.read(File.join(base, name), :encoding => "utf-8")
0
散装海盗
散装海盗

可是LZ,,,按照要求修改了以后还是有错误,,,而且是更奇葩的:

$ jekyll
Configuration from f:/git/atttx123.github.com/_config.yml
Building site: f:/git/atttx123.github.com -> f:/git/atttx123.github.com/_site
c:/Ruby192/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/convertible.rb:30:i
n `read_yaml': invalid byte sequence in UTF-8 (ArgumentError)

这个错误有没有遇到过。。。。

0
BeanMr
BeanMr

也不太懂Ruby,看大家说的和我本机的报错,猜测是文件读取过程中没有指定编码的问题。

看了一下源码,发现了这个方法,猜测是从yml读取编码配置了。

# Returns merged optin hash for File.read of self.site (if exists)
    # and a given param
    def merged_file_read_opts(opts)
      (self.site ? self.site.file_read_opts : {}).merge(opts)
    end

    # Read the YAML frontmatter.
    #
    # base - The String path to the dir containing the file.
    # name - The String filename of the file.
    # opts - optional parameter to File.read, default at site configs
    #
    # Returns nothing.
    def read_yaml(base, name, opts = {})
      begin
        self.content = File.read_with_options(File.join(base, name),
                                              merged_file_read_opts(opts))
        if self.content =~ /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m
          self.content = $POSTMATCH
          self.data = YAML.safe_load($1)
        end
      rescue SyntaxError => e
        puts "YAML Exception reading #{File.join(base, name)}: #{e.message}"
      rescue Exception => e
        puts "Error reading file #{File.join(base, name)}: #{e.message}"
      end

      self.data ||= {}
    end

所以我根据jekyll的配置http://jekyllrb.com/docs/configuration/

在_config.yml中加了

encoding: utf-8



然后就正常了。

但是保存的时候需要设置一下编辑器默认保存为UTF-8

BeanMr
BeanMr
回复 @famido : 你保存文件的时候一定要保存成UTF-8 我用的无BOM格式的
famido
famido
就感觉你的我的问题最相符,但是还是没有解决啊,依然报同样的错误,还有哪里需要注意的么?
返回顶部
顶部