Bug #9766
closedAdd force_encoding option to csv
Description
Hi there,
I have a trouble when I use csv#generate with encoding 'Shift-JIS' option. I investigated it for a long time and found it is caused by compatibility within "UTF-8" and "Shift-JIS". Since "Shift-JIS" can be converted to UTF-8, a row with UTF-8 strings added to the csv instance makes the encoding of whole rows UTF-8.
Take a look at the code below.
https://github.com/dtaniwaki/ruby/blob/trunk/lib/csv.rb#L1658
Here's the code example.
irb(main):002:0> s = generate(encoding: 'SJIS') do |csv|
csv << ['あ']
end
=> ["あ"]
irb(main):003:0> s
=> "あ\n"
irb(main):004:0> s.encoding
=> #<Encoding:UTF-8>
I was intended to make SJIS encoded csv, but the result was UTF-8 csv. I think everyone think it should generate Shift-JIS encoded csv string, so could you consider to merge the change attached to this issue?
The expected result is here.
Files
Updated by dtaniwaki (DAISUKE TANIWAKI) about 12 years ago
The method to reproduce this should be CSV.generate in the code blocks.
I wish it could be merged in all the versions of ruby.
Updated by nobu (Nobuyoshi Nakada) about 12 years ago
- File 0001-csv.rb-honor-encoding-option.patch 0001-csv.rb-honor-encoding-option.patch added
- Tracker changed from Feature to Bug
- Description updated (diff)
- Status changed from Open to Assigned
- Assignee set to JEG2 (James Gray)
- ruby -v set to all
- Backport set to 2.0.0: REQUIRED, 2.1: REQUIRED
I'd rather think it a bug.
Updated by nobu (Nobuyoshi Nakada) about 12 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
Applied in changeset r46391.
csv.rb: honor encoding option
- lib/csv.rb (CSV#<<): honor explicity given encoding. based on
the patch by DAISUKE TANIWAKI at
[ruby-core:62113]. [Bug #9766]
Updated by nagachika (Tomoyuki Chikanaga) almost 12 years ago
- Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED to 2.0.0: REQUIRED, 2.1: DONE
r46391 and r46395 were backported into ruby_2_1 branch at r47586.
Updated by usa (Usaku NAKAMURA) almost 12 years ago
- Backport changed from 2.0.0: REQUIRED, 2.1: DONE to 2.0.0: DONE, 2.1: DONE
backported into ruby_2_0_0 at r47608.