def handle_encoding str
str = str.dup
ruby19 = str.respond_to? :encoding
encoding = nil
header = str.lines.first(2)
header.map! { |s| s.force_encoding "ASCII-8BIT" } if ruby19
first = header.first || ""
encoding, str = "utf-8", str[3..-1] if first =~ /\A\xEF\xBB\xBF/
encoding = $1.strip if header.find { |s|
s[/^#.*?-\*-.*?coding:\s*([^ ;]+).*?-\*-/, 1] ||
s[/^#.*(?:en)?coding(?:\s*[:=])\s*([\w-]+)/, 1]
}
if encoding then
if ruby19 then
encoding.sub!(/utf-8-.+$/, 'utf-8')
hack_encoding str, encoding
else
warn "Skipping magic encoding comment"
end
else
hack_encoding str if ruby19
end
str
end