def body_charset(str=self.raw_body)
ctype = self['content-type'] || 'text/html'
return nil unless ctype =~ /^text/i || ctype =~ /x(ht)?ml/i
charsets = ['latin1']
if ctype.match(/charset=["']?([^\s"']+)["']?/i)
charsets << $1
debug "charset #{charsets.last} added from header"
end
case str
when /<\?xml\s[^>]*encoding=['"]([^\s"'>]+)["'][^>]*\?>/i
charsets << $1
debug "xml charset #{charsets.last} added from xml pi"
when /<(meta\s[^>]*http-equiv=["']?Content-Type["']?[^>]*)>/i
meta = $1
if meta =~ /charset=['"]?([^\s'";]+)['"]?/
charsets << $1
debug "html charset #{charsets.last} added from meta"
end
end
return charsets.uniq
end