can't create emails with body in ISO-2022-JP encoding #342

Closed
mreinsch opened this Issue Feb 2, 2012 · 3 comments

3 participants

@mreinsch

Assume, for instance, the following code to create an ISO-2022-JP email (commonly used by Japanese feature phones for email):

mail = Mail.new { content_type ["text", "plain", { "charset" => "ISO-2022-JP" }] }
mail.body = "にほんごです".encode("ISO-2022-JP")
puts mail.to_s

This produces the following exception:

 Encoding::CompatibilityError:
   incompatible encoding regexp match (US-ASCII regexp with ISO-2022-JP string)
 # mail/lib/mail/core_extensions/string.rb:13:in `=~'
 # mail/lib/mail/core_extensions/string.rb:13:in `!~'
 # mail/lib/mail/core_extensions/string.rb:13:in `blank?'
 # mail/lib/mail/body.rb:36:in `initialize'
 # mail/lib/mail/message.rb:1909:in `new'
 # mail/lib/mail/message.rb:1909:in `process_body_raw'
 # mail/lib/mail/message.rb:1155:in `body'
 # mail/lib/mail/message.rb:1934:in `identify_and_set_transfer_encoding'
 # mail/lib/mail/message.rb:1689:in `ready_to_send!'
 # mail/lib/mail/message.rb:1707:in `encoded'
 # mail/lib/mail/message.rb:1776:in `to_s'
@knu
knu commented Feb 2, 2012

The library should be able to handle non-ASCII compatible strings, and ISO-2022-JP support is indeed very important in Japanese market and community.

For ISO-2022-JP(_KDDI) input, you can temporarily encode it into Encoding::Stateless_ISO_2022_JP(_KDDI), do regexp processing, and then encode back to ISO-2022-JP.

For other non-ASCII compatible strings, you can use force_encoding(Encoding::ASCII_8BIT) to enable regexp processing and force_encoding(original_encoding) to set it back, so long as what you do with regexps do not include up/downcasing, word matching or folding but just binary processing or whitespace processing that rarely do harm in any encoding.

@mreinsch

Thanks for your comments (also on twitter :) - I'll try that.
I had already suggested to force_encoding("binary") any incoming String in #341 to fix #340 - but someone correctly observed that this would break 1.8 compatibility - well, time to move on and deprecate 1.8, imho.

@jeremy
Collaborator

See https://github.com/kuroda/mail-iso-2022-jp for a fix. Please do investigate merging this back to the mainline mail lib :bowtie:

@jeremy jeremy closed this Jan 27, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment