参数还包括阿拉伯数字,我想将其转换为数字: -
"lexus/yr_٢٠٠١_٢٠٠٦"
我尝试了这个
params[:query].tr!('٠١٢٣٤٥٦٧٨٩','0123456789').delete!(" ")
但是它给出了一个错误
Encoding::CompatibilityError Exception: incompatible character encodings: UTF-8 and ASCII-8BIT
我做
params[:query].force_encoding('utf-8').encode.tr!('٠١٢٣٤٥٦٧٨٩','0123456789').delete!(" ")
我如何转换?
如果您执行了UTF-8编码,则可以正常工作。
str = "lexus/yr_٢٠٠١_٢٠٠٦"
str.tr('٠١٢٣٤٥٦٧٨٩','0123456789')
返回"lexus/yr_2001_2006"
ASCII 8位并不是真正的编码。它是二进制数据,而不是基于文本的东西。将ASCII 8位转到UTF-8不是有意义的操作。我建议确保通过您的TextField通过query
参数的请求使用有效的字符串编码,如果您可以控制此请求。您可以在Ruby中使用String#valid_encoding?
方法检查您正在接收正确编码的字符串。