文件名中的希腊字母

时间:2015-10-01 19:35:04

标签: ruby encoding

我的目标是将所有希腊语命名的文件重命名为英语文件(只需将希腊字符更改为各自的英文字符)。这是我的代码:

lettersmap = {"α"=>"a"}
puts lettersmap["α"]

Dir.foreach('.') do |file_name|
  file_name = file_name.split('')
  file_name.each do |letter|
    puts lettersmap[letter]
  end
end
end

puts lettersmap["α"],它会打印a。如果我有一个名为α.txt的文件,那么它就没有了。我试过letter.encoding(Encoding::UTF_8)letter.force_encoding(Encoding::UTF_8);既没有奏效。如何使用希腊字母索引lettersmap

1 个答案:

答案 0 :(得分:2)

Dir方法默认为文件系统编码(Encoding.find('filesystem'))。在Windows上,它是ANSI或OEM字符集(an explanation from Microsoft),但仍然既不是UTF-8也不是UTF-16LE(现代Windows版本使用)。问题是在您的情况下文件系统编码不能代表α字符。 Ruby然后默默地用?替换这些字符。尝试打印file_name

该解决方案明确指定了一种能够通过encoding关键字参数表示此字符的编码。 UTF-8 is usually a good choice

示例:

Dir.foreach('.', encoding: Encoding::UTF_8) do |file_name|
  # ...
end