了解Ruby何时将字符串更改为Unicode表示形式

时间:2018-09-17 17:02:18

标签: ruby unicode

我想知道为什么在以下情况下Ruby为什么用不同的方式表示我的返回值。我正在向函数发送方程列表,并立即按原样返回它。如果直接打印,≡将显示为其Unicode序列。如果我索引结果,它将再次显示为≡。在测试Unicode序列是否等于when时,我得到"Extracting [$filePath]..." & $7ZipPath "x" $filePath "-o$extractionPath" "-aos" "-bsp1" | out-string -stream | Select-String -Pattern "\d{1,3}%" -AllMatches | ForEach-Object { $_.Matches.Value } | foreach { [System.Console]::SetCursorPosition(0, [System.Console]::CursorTop) Write-Host "Progress:" $_ -NoNewLine } ,所以我不关心值是否更改。我只想知道为什么它在屏幕上的打印方式不同。

true

输出:

def Explain(equations)
  equations
end

equations = ["x≡3(mod4)", "x≡4(mod5)"]

puts "ORIGINAL LIST"
equations.each { |e| puts e }

puts "\n\nRETURNED AS A LIST"
puts Explain(equations).to_s

puts "\n\nRETURNED AND ACCESSED INDIVIDUALLY"
puts Explain(equations)[0]
puts Explain(equations)[1]

2 个答案:

答案 0 :(得分:0)

当您在数组上调用to_s时,将发生转换。它将数组中的每个值转换为基于统一ascii的字符串。

答案 1 :(得分:0)

它不是“更改为Unicode表示形式”,而是更改为inspect表示形式。 puts对给定的参数调用to_s以便显示它们,默认情况下Array只是以其“原始”形式显示。

打印单个元素会产生所需的行为,因为这是一个简单的字符串。打印数组本身是有问题的,因为数组将使用.inspect显示。

尝试一下:

puts equations.join(' ')

将它们与空格结合在一起的地方,一切看起来都很好。

注意:当“检查”字符串时,如果字符串中出现任何非ASCII字符,则使用\u...表示法。 \n等事物也是如此。