non ascii encoding

26 views
Skip to first unread message

Jim Ruther Nill

unread,
Nov 13, 2012, 2:22:23 AM11/13/12
to rubyonra...@googlegroups.com
Hi guys!

I have a company model with a name attribute.  Each company is association a set of projects.  I created a feature which allows users to
download a csv version of these projects.  The download will give you a
zipped file of all projects grouped by company.  So the zip file contains x
number of csv files where x is the number of companies.  Everything is
working nice.

But when a user created a company whose name contains greek
characters, I suddenly get issues with encoding.  Here's a small part of
the code that creates the zip file (i'm using zipruby btw)

Zip::Archive.open(file, Zip::CREATE) do |archive|
  companies.each do |company|
    data = CSV.generate(row_sep: "\r\n", quote_char: '"', force_quotes: true) do |csv|
      company.projects.each { |project| csv << project.name }
    end

    archive.add_buffer "#{company.name}.csv", data
  end
end

so when company.name contains greek characters, i get a filename similar to company??????.csv which cant be opened.  I can't find a
way to set the encoding of the filename so I just gsubbed it and ignored
all non-ascii characters which is fine.  But if one of the projects also
has a greek character, then the csv file will contain weird non-greek
characters.

Any help or insight is appreciated. Thanks!


--
-------------------------------------------------------------
visit my blog at http://jimlabs.heroku.com

Max Shytikov

unread,
Nov 14, 2012, 10:21:38 AM11/14/12
to rubyonra...@googlegroups.com
Hi Jim,

Looks that you have encoding problems, check your current encoding 
 
puts Encoding.default_external

To solve your problem it should be UTF-8. Because according to the docs http://www.ruby-doc.org/core-1.9.3/Encoding.html#method-c-default_external

"File data written to disk will be transcoded to the default external encoding when written."

Or you can use additional options :encoding in CSV.generate (http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html#method-c-generate)

Jim Ruther Nill

unread,
Nov 14, 2012, 10:31:24 AM11/14/12
to rubyonra...@googlegroups.com
On Wed, Nov 14, 2012 at 11:21 PM, Max Shytikov <mshy...@gmail.com> wrote:
Hi Jim,

Hi Max, thanks for replying.  I gave
 
Looks that you have encoding problems, check your current encoding 
 
puts Encoding.default_external

To solve your problem it should be UTF-8. Because according to the docs http://www.ruby-doc.org/core-1.9.3/Encoding.html#method-c-default_external

"File data written to disk will be transcoded to the default external encoding when written."

I checked that out, it is set to utf-8 

>> Encoding.default_external
=> #<Encoding:UTF-8>
 
Or you can use additional options :encoding in CSV.generate (http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV.html#method-c-generate)

i'll try this one out but it seems like if i pass the encoding here, all strings passed will be processed as having that encoding right?
But anyway, it's the only lead I have so I'll give it a try. Thanks!
 

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonra...@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/74A_AKUpG08J.
For more options, visit https://groups.google.com/groups/opt_out.
 
 
Reply all
Reply to author
Forward
0 new messages