ruby Dir.entries无法识别特殊字符

时间:2015-07-30 11:41:08

标签: ruby special-characters shoes

我正在使用

Dir.entries("myFolder")

获取所有文件名。问题是,我得到了占位符而不是一些特殊字符。如果文件名包含Č,Š等特殊字符,则会发生错误。

我已经指定了文件编码:

#encoding: utf-8.

在Linux上,这种方法很有效,在Windows上却没有。

irb中的测试结果:

[".", "..", "MA\xC8KA.png", "PES.png", "VLAK.png", "\x8EOGA.png"]

应该是:

[".", "..", "MAČKA.png", "PES.png", "VLAK.png", "ŽOGA.png"]

除了替换这些字符外,还有其他方法可以解决这个问题吗?

-------- EDIT -----------

irb(main):001:0> Dir.entries("myFolder").map {|e| e.force_encoding('Windows-1250').encode('UTF-8')}

=> [".", "..", "MA\u010CKA.png", "PES.png", "VLAK.png", "\u017DOGA.png"]

irb(main):002:0> Dir.entries("myFolder").map {|e| e.force_encoding('UTF-8')}

=> [".", "..", "MA\xC8KA.png", "PES.png", "VLAK.png", "\x8EOGA.png"]

-------- EDIT -----------

---------编辑2 -------------

#encoding: utf-8
require 'green_shoes'

Shoes.app do

  button "Get sample image name" do
    @words_images = Dir.entries("myFolder").each {|word| word.gsub!(".png", "")}
    @words_images.delete(".")
    @words_images.delete("..")
    @test.append{para @words_images.sample}
  end

  @test = stack do
  end

end

---------编辑2 -------------

谢谢。

此致 西巴

1 个答案:

答案 0 :(得分:1)

我在读取目录中的文件时通过传递编码选项解决了这个问题:

Dir.entries("myFolder", encoding: "utf-8")

稍后更改或强制更改编码的任何尝试都将失败。

提醒自己更仔细阅读文件......

的问候, 西巴