each_char 里面用哈希hash发现无法返回预期的数值

worknova 2016-12-23 06:31:29
代码如下:

def han2num(str)
myhash = {"一" => "1" , "二" => "2", "三" => "3" , "四" => "4", "五" => "5", "六" => "6", "七" => "7", "八" => "8", "九" => "9"}
#自定义一个散列数组,用中文的大写数字作为键。

str.each_char do |char|
p char
p myhash[char]
p myhash.key?(char)
end
end

p han2num(ARGV[0])

在程序中 p myhash.include?(char) 总是返回false,程序中输入“五千三百八十三” 比如第一次迭代,按照道理
char = “五” ,myhash[“五”] 应该等于 “5”,myhash.include?(char) 应该返回true啊,为什么是false?

奇怪的是,我单独写
hash2 = {"一" => "1" , "二" => "2", "三" => "3" , "四" => "4", "五" => "5", "六" => "6", "七" => "7", "八" => "8", "九" => "9"}
char = "五"
p hash2.key?(char)

这个最后hash2.key 又是true,
这个问题怎么解答?

...全文
5114 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
worknova 2016-12-29
  • 打赏
  • 举报
回复
谢谢你,我正在研究编码的问题。应该是GBK和UTF-8的问题吧。我在控制台输入的格式是GBK的,在文件中是UTF-8的,应该是这样。
blackant2 2016-12-27
  • 打赏
  • 举报
回复
p han2num("一二".force_encoding('gbk')) "\x{E4B8}" nil false "\x80" nil false "\x{E4BA}" nil false "\x8C" nil false "\x{E4B8}\x80\x{E4BA}\x8C" => "\x{E4B8}\x80\x{E4BA}\x8C"
blackant2 2016-12-27
  • 打赏
  • 举报
回复
2.2.0 :004 > def han2num(str) 2.2.0 :005?> myhash = {"一" => "1" , "二" => "2", "三" => "3" , "四" => "4", "五" => "5", "六" => "6", "七" => "7", "八" => "8", "九" => "9"} 2.2.0 :006?> #自定义一个散列数组,用中文的大写数字作为键。 2.2.0 :007 > 2.2.0 :008 > str.each_char do |char| 2.2.0 :009 > p char 2.2.0 :010?> p myhash[char] 2.2.0 :011?> p myhash.key?(char) 2.2.0 :012?> end 2.2.0 :013?> end => :han2num 2.2.0 :014 > 2.2.0 :015 > p han2num("一二") "一" "1" true "二" "2" true "一二" => "一二" 2.2.0 :016 > 你文件编码不对

2,763

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ruby/Rails
社区管理员
  • Ruby/Rails社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧