From: nobu@... Date: 2014-04-22T03:56:15+00:00 Subject: [ruby-core:62129] [ruby-trunk - Bug #9766] [Assigned] Add force_encoding option to csv Issue #9766 has been updated by Nobuyoshi Nakada. File 0001-csv.rb-honor-encoding-option.patch added Tracker changed from Feature to Bug Description updated Status changed from Open to Assigned Assignee set to James Gray ruby -v set to all Backport set to 2.0.0: REQUIRED, 2.1: REQUIRED I'd rather think it a bug. ---------------------------------------- Bug #9766: Add force_encoding option to csv https://bugs.ruby-lang.org/issues/9766#change-46286 * Author: DAISUKE TANIWAKI * Status: Assigned * Priority: Normal * Assignee: James Gray * Category: lib * Target version: current: 2.2.0 * ruby -v: all * Backport: 2.0.0: REQUIRED, 2.1: REQUIRED ---------------------------------------- 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. ```ruby irb(main):002:0> s = generate(encoding: 'SJIS') do |csv| csv << ['���'] end => ["���"] irb(main):003:0> s => "���\n" irb(main):004:0> s.encoding => # ``` 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. ```ruby irb(main):002:0> s = generate(encoding: 'SJIS', force_encoding: true) do |csv| csv << ['���'] end => ["���"] irb(main):003:0> s => "\x{E381}\x82\n" irb(main):004:0> s.encoding => # ``` ---Files-------------------------------- csv.rb.diff (1.41 KB) 0001-csv.rb-honor-encoding-option.patch (2.64 KB) -- https://bugs.ruby-lang.org/