[code="java"]
#!/usr/bin/env ruby
require 'dbi'
DBI.connect('DBI:Mysql:fodc', 'root', 'root') do | dbh |
dbh.select_all('select uname from forum_waterman_9 limit 1')do |row|
str = row[0]
p str
printf "%s\n", row[0]
end
end[/code]
输出:
"\xBC\xD1\xC0\xF6\xD3\xE0"
佳丽余
而数据库是gbk编码存储的
...
ENGINE=InnoDB DEFAULT CHARSET=gbk
问题:
1. "\xBC\xD1\xC0\xF6\xD3\xE0"是什么编码?
2. puts和printf区别在哪里?
谢谢大虾
p在字符不是ascii的情况下会出现上面那种形式
貌似你用的是1.9。。
你的是p不是puts...
p 会调用inspect
puts 会调用to_s
问题的标题和内容不完全吻合。代码里是p s输出了那组看起来像乱码的东西,而不是puts。p和puts是不一样的。
p s输出的那串东西的内容其实就是GBK编码的字符串,只是把每个字节都换成\xNN的形式来显示了而已。这是Ruby 1.9之前的遗留问题,在1.9上我试过就不会这样
puts会添加换行符,print不会,printf是格式化输出。