ruby读取数据库,为什么puts输出“"\xBC\xD1\xC0\xF6\xD3\xE0"”和printf输出“佳丽余”

[code="java"]
#!/usr/bin/env ruby

coding: gbk

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是格式化输出。