Hi Laurent,

The problem is  in the self.eof_packet? method of protocol.rb.

The statement that causes the problem is:
      data[0] == ?\xfe && data.length == 5

When run under macruby this is what happens:
Encoding of data[0] is ASCII-8BIT.  Encoding of ?\xfe is UTF-8
The compare fails in macruby but in MRI it succeeds (because in MRI the encoding of ?\xfe is ascii - actually it's US_ASCII, but that seems to compare equal)

If I use force_encoding UTF-8 then things work OK - as far as I've tested.


Steve


Begin forwarded message:

From: Laurent Sansonetti <laurent.sansonetti@gmail.com>
Subject: Re: [MacRuby-devel] macruby produces strings with encodings that differ from MRI
Date: 18 September 2011 10:00:13 GMT+01:00
To: "MacRuby development discussions." <macruby-devel@lists.macosforge.org>
Reply-To: "MacRuby development discussions." <macruby-devel@lists.macosforge.org>

Hi Steve,

It would be nice to know what exactly in ruby-mysql causes the
problem. If you can reduce the problem to a simple code snippet or
point us to the ruby-mysql source code it would be great.

Thanks
Laurent

On Sun, Sep 18, 2011 at 8:38 AM, Steve Clarke <steve@sclarkes.me.uk> wrote:
Yes, looks like the same issue as ticket 742.  I did  look at tickets but failed to spot that.

The comment on the ticket re only UTF-8 being required may be true - it certainly is for me.  Sadly the ruby-mysql gem works in such a way that the difference between MRI and macruby breaks it.

Steve

On 18 Sep 2011, at 06:07, Watson wrote:

Hi,

Maybe related to http://www.macruby.org/trac/ticket/742.
MacRuby ignore magic-comment, and uses default encoding UTF8.

Thanks.

2011/9/18 Steve Clarke <steve@sclarkes.me.uk>:
Code
========

ABC='ABC'
puts "ABC[0] encoding is #{ABC[0].encoding}"
puts "?\\xff encoding is #{?\xff.encoding}"


Output
========


MRI output

ABC[0] encoding is US-ASCII
?\xff encoding is ASCII-8BIT



macruby output

ABC[0] encoding is UTF-8
?\xff encoding is UTF-8


The encodings reported above did not seem to be effected by the encoding of the source file.  I tried both ASCII and UTF-8.

When the same code is executed in (mac)irb the results are the same for macirb as they are for macruby.
irb for MRI however produces UTF-8 strings in both cases! This seemed very odd but I'm fairly sure it's because I have an environment variable:
LANG=GB.UTF-8
When I changed to LANG=GB.US_ASCII irb for MRI rendered 'abc'[0] with US_ASCII encoding. macirb still used UTF-8.

(I discovered this when trying to get ruby-mysql to work with macruby.  It doesn't work as-is but seems to work with a few mods that use force_encoding to make MRI and macruby produce the same outputs).
I abandoned my earlier attempts to use postgres with macruby via the pg gem.  It failed regularly but in unpredictable ways associated, as far as I could tell, with memory management problems.


_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel