Ruby 文件名中的希腊字母
我的目标是将所有希腊命名文件重命名为英语文件(只需将希腊字符更改为各自的英语字符)。这是我的代码:Ruby 文件名中的希腊字母,ruby,encoding,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 在放置字母map[“α”]
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
在
放置字母map[“α”]
时,它打印a
。如果我有一个名为α.txt
的文件,它就没有了。我尝试了letter.encoding(encoding::UTF_8)
和letter.force_编码(encoding::UTF_8)
;两者都不起作用。如何使用希腊文字母为字母map
编制索引?文件系统编码(encoding.find('filesystem')
)的Dir
方法默认为文件系统编码。在Windows上是ANSI或OEM字符集(),但仍然不是UTF-8或UTF-16LE(现代Windows版本使用)。问题是您的文件系统编码不能表示α
字符。Ruby然后用?
悄悄地替换这些字符。尝试打印文件名
解决方案是通过encoding
关键字参数显式指定能够表示此字符的编码
例如:
Dir.foreach('.', encoding: Encoding::UTF_8) do |file_name|
# ...
end
你确定文件名是
“α”.txt
(或“\”α\“.txt”
)而不是α.txt
(“α.txt”
)?@sawa很抱歉,你是对的,文件名是“α.txt”(没有引号),修复了为什么不使用文件名的问题。每个字符都,并避免分割部分?无论如何,您可能只想使用在一次拍摄中重新映射所有字母。这样做很好:“αβ123.txt”.tr(“αβ”,“ab”)#=>“ab123.txt”
。哦,我看到@tadman提到了这一点。我将为示例留下注释。我正在打印文件名,顺便说一句,它确实在终端中打印?
。如果我将输出发送到.txt,它实际上是在打印α。我想这是因为我的编辑器使用的编码(升华文本)