diff --git a/lib/csv.rb b/lib/csv.rb index 30e4b23586..336b42a697 100644 --- a/lib/csv.rb +++ b/lib/csv.rb @@ -1014,8 +1014,8 @@ class CSV HeaderConverters = { downcase: lambda { |h| h.encode(ConverterEncoding).downcase }, symbol: lambda { |h| - h.encode(ConverterEncoding).downcase.strip.gsub(/\s+/, "_"). - gsub(/\W+/, "").to_sym + h.encode(ConverterEncoding).downcase.gsub(/[^[\s\w]]+/, "").strip. + gsub(/\s+/, "_").to_sym } } diff --git a/test/csv/test_headers.rb b/test/csv/test_headers.rb index d8a1c15836..5ec8932d95 100755 --- a/test/csv/test_headers.rb +++ b/test/csv/test_headers.rb @@ -225,6 +225,13 @@ class TestCSV::Headers < TestCSV assert_equal([:one, :two_three], csv.headers) end + def test_builtin_symbol_converter_with_punctuation + csv = CSV.parse( "One, Two & Three ($)", headers: true, + return_headers: true, + header_converters: :symbol ) + assert_equal([:one, :two_three], csv.headers) + end + def test_builtin_converters_with_blank_header csv = CSV.parse( "one,,three", headers: true, return_headers: true,