我需要用gets
方法获取字符串"öçğü"
,但是无法成功。我可以正确地从文件中读取,但是gets
不能接受这些字符。我使用了# encoding: UTF-8
,并在Windows cmd
shell上运行此代码。
当我尝试输入ç
时,会出现以下错误:
`downcase': input string invalid (ArgumentError)
input = gets.chomp.downcase.split
我需要用gets
方法获取字符串"öçğü"
,但是无法成功。我可以正确地从文件中读取,但是gets
不能接受这些字符。我使用了# encoding: UTF-8
,并在Windows cmd
shell上运行此代码。
当我尝试输入ç
时,会出现以下错误:
`downcase': input string invalid (ArgumentError)
input = gets.chomp.downcase.split
使用文件顶部的“magic”注释设置文件编码仅指定文件中源代码的编码(即:您在代码中直接创建的字符串文字的编码)。
Ruby知道另外两个默认编码:
在您的情况下,您没有设置外部编码。在 Windows 并且在 Ruby 版本 3.0 之前,Ruby 假定您的 Windows 安装的本地控制台编码为 cp850(例如在西欧)。
当 Ruby 读取您的字符串时,它假设它采用的是 cp850 编码(或其他默认编码),而您可能提供的是 utf-8 编码的数据。只要您开始对这些错误编码的数据进行操作,就会出现类似于您在那里看到的错误。
因此,为了能够正确地读取数据,您需要提供与您的 shell 编码匹配的编码,或者您需要告诉 Ruby 它应该假定哪种编码。
如果您提供的是 UTF-8 编码的数据,则可以在调用 ruby 时使用 -E
开关设置预期的编码,例如:
ruby -E utf-8 your_program.rb
set RUBYOPT=-Eutf-8