Ruby on rails Ruby从文件名中删除变音符号-如何保留它们?
我有一个目录,里面有很多文件,文件名中有Unicode字符和变音符号,例如Ruby on rails Ruby从文件名中删除变音符号-如何保留它们?,ruby-on-rails,ruby,unicode,character-encoding,Ruby On Rails,Ruby,Unicode,Character Encoding,我有一个目录,里面有很多文件,文件名中有Unicode字符和变音符号,例如ăn.mp3,bất、 mp3。(它们是越南语单词。) 我正在使用Dir.glob(“path/to/folder/*”)对这些文件进行迭代。每个文件都是,但是发音符号不能正常工作。例如: Dir.glob("path/to/folder/*").each do |file| # e.g. file = "path/to/folder/bất.mp3" word = file.split("/").last.spl
ăn.mp3
,bất、 mp3
。(它们是越南语单词。)
我正在使用Dir.glob(“path/to/folder/*”)对这些文件进行迭代。每个文件都是,但是发音符号不能正常工作。例如:
Dir.glob("path/to/folder/*").each do |file|
# e.g. file = "path/to/folder/bất.mp3"
word = file.split("/").last.split(".").first # bất
puts word[1] # outputs "a", but should be "ấ"
end
奇怪的是,如果我运行放置单词
,则发音符号会正确显示,但如果我运行放置单个字母,它们就不存在了。在我的Rails应用程序中,文件名最终被保存为表中的一个属性,并且由于变音符号不一致和消失,各种各样的问题都在发生
很明显,我的编码有问题,但我不知道如何解决这个问题。这不仅是Rails的问题,也是Ruby本身的问题,因为上面的输出来自irb
,独立于任何Rails应用程序
(我正在运行Ruby 2.0.0p247。)
到底发生了什么事?有两种方法可以制作一个光盘。一种是使用带有数字符号的字母。另一种方法是使用普通字母,然后立即使用特殊字母。你确定不属于后一种情况吗?(如果是这样,放置'a'+单词[2]
应产生带有字母的字母。)
另外,您是否确定使用utf8(或utf16)而不是字节序列对字符串进行了正确编码?ahhh这就是问题所在。例如,x[1]=“a”,x[2]=“̂”,x[3]=“́”
。所以我的后续问题是:如何将字符串从这种形式转换为“单字符变音”形式?我需要它的后一种形式,用于以后在我的应用程序中发生的一系列字符串操作。此外,所有内容都显示在UTF-8中,即“string”。编码输出。
。等等。。。我找到了自己问题的答案。我想使用UnicodeUtils
,特别是UnicodeUtils.nfc(word)
。请小心这些文件,因为它们的名称实际上是包含这些字节序列的版本,而不是相应的“可打印”字符。这一点很好。到目前为止,在我的特定用例中,这似乎没有引起任何问题,但我会记住这一点,谢谢。