Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby从文件名中删除变音符号-如何保留它们?_Ruby On Rails_Ruby_Unicode_Character Encoding - Fatal编程技术网

Ruby on rails Ruby从文件名中删除变音符号-如何保留它们?

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

我有一个目录,里面有很多文件,文件名中有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.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)
。请小心这些文件,因为它们的名称实际上是包含这些字节序列的版本,而不是相应的“可打印”字符。这一点很好。到目前为止,在我的特定用例中,这似乎没有引起任何问题,但我会记住这一点,谢谢。