Ruby兼容性错误编码
我遇到了问题。 我们看看吧:
C:\ temp> ruby script.rb
script.rb => Powershell output puts "ę" => ę #irb \xA9 puts "\xA9" => ▯ puts "ę"=="\xA9" => false input = $stdin.gets.chomp => input=="ę" puts "e#{input}e" => eęe puts "ę"==input => false puts "ę#{input}" => Encoding::Compatibility Error Utf8 & CP852 irb => #command line in ruby puts "ę"=="\xA9" => true input = $stdin.gets.chomp => input=="ę" puts "ę"==input => true && "\xA9"==input => true puts "ę#{input}" => ęę
看起来PowerShell的输入使用其他字体用于所有特殊字符而不是ruby和notepad ++(?)。 我可以更改它,以便当我输入提示符(当被询问时)并且不显示错误时它会起作用吗?
编辑:抱歉误导。 我添加了invoke并指定该文件的扩展名为“.rb”而不是“.txt”
Edit2:好的,我已经研究了一些更多的信息,我一直在尝试对变量做一些编码(UTF8)。 有些奇怪的事发生了。
puts "ę#{input.encoding}" => ęCP852 puts "\xA9" => UTF-8
对CP852的编码表明编码传递字节。 我了解到“ę”的值= 20 + 99 = 119,“±”= 20 + 85,20 = C4
好。 得到它“.encoding” – 显示我使用的编码。 这解决了这个问题。
puts "ę#{input.encode "UTF-8"}" => ęę
谢谢各位的意见。
如果您在提示符输入(cmd或powershell)导致由于使用不同编码的不兼容而导致问题,请尝试通过脚本中的方法对其进行编码。编码.encode "UTF-8" #in case of Ruby language
如果您不知道使用哪种方法只是google your_language_name encoding