diff options
author | jeg2 <jeg2@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-12-26 16:53:13 +0000 |
---|---|---|
committer | jeg2 <jeg2@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-12-26 16:53:13 +0000 |
commit | 7d052b1d742f8c8ae32e106a0cf75dc0fd7b8fbd (patch) | |
tree | dc547b6acaffba5bc2b75cbc7dbbdab73d793500 /lib/csv.rb | |
parent | b729ec53a240564bdb94b1a6c5ae943c67f8c49d (diff) |
* lib/csv.rb: Using a more robust transcoding scheme to produce
ASCII compatible inspect() messages. [ruby-dev:37591]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21074 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/csv.rb')
-rw-r--r-- | lib/csv.rb | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/lib/csv.rb b/lib/csv.rb index 6fb5da4d79..fd83fdc354 100644 --- a/lib/csv.rb +++ b/lib/csv.rb @@ -199,7 +199,7 @@ require "stringio" # class CSV # The version of the installed library. - VERSION = "2.4.4".freeze + VERSION = "2.4.5".freeze # # A CSV::Row is part Array and part Hash. It retains an order for the fields @@ -487,7 +487,7 @@ class CSV end alias_method :to_s, :to_csv - # A summary of fields, by header, in an ASCII-8BIT String. + # A summary of fields, by header, in an ASCII compatible String. def inspect str = ["#<", self.class.to_s] each do |header, field| @@ -495,7 +495,14 @@ class CSV ":" << field.inspect end str << ">" - str.map { |s| s.encode("ASCII-8BIT") }.join + begin + str.join + rescue # any encoding error + str.map do |s| + e = Encoding::Converter.asciicompat_encoding(s.encoding) + e ? s.encode(e) : s.force_encoding("ASCII-8BIT") + end.join + end end end @@ -1899,7 +1906,7 @@ class CSV # # Returns a simplified description of the key FasterCSV attributes in an - # ASCII-8BIT String. + # ASCII compatible String. # def inspect str = ["<#", self.class.to_s, " io_type:"] @@ -1926,7 +1933,14 @@ class CSV str << " headers:" << headers.inspect end str << ">" - str.map { |s| s.encode("ASCII-8BIT") }.join + begin + str.join + rescue # any encoding error + str.map do |s| + e = Encoding::Converter.asciicompat_encoding(s.encoding) + e ? s.encode(e) : s.force_encoding("ASCII-8BIT") + end.join + end end private |