Non ascii encoding

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!

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 http://www.ruby-doc.org/core-1.9.3/File.html 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)

On Wed, Nov 14, 2012 at 11:21 PM, Max S. [email protected]
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 http://www.ruby-doc.org/core-1.9.3/File.html 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!

x
true) do |csv|
all non-ascii characters which is fine. But if one of the projects also

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs