Bug in String#unpack on windows or ??

D

Damjan Rems

I am trying to save attachment(s) from mail read with net/imap.
Attachment is a tif file.

att = imap.fetch(msgID, "BODY[2]")[0].attr["BODY[2]"].unpack('m')
File.new('att.tif','w+').write(att)

I tried it on linux and it works withouth glitch, but on windows every
LF (x0A) character is replaced with CRLF sequence. Needless to say file
is unreadable.

Is this a bug or am I missing something?


Thank you

TheR
 
A

Alex Young

Damjan said:
I am trying to save attachment(s) from mail read with net/imap.
Attachment is a tif file.

att = imap.fetch(msgID, "BODY[2]")[0].attr["BODY[2]"].unpack('m')
File.new('att.tif','w+').write(att)

I tried it on linux and it works withouth glitch, but on windows every
LF (x0A) character is replaced with CRLF sequence. Needless to say file
is unreadable.

Is this a bug or am I missing something?

Try File.new('att.tif','wb+').write(att). From memory, the 'b' in 'wb+'
turns off newline conversion.
 
F

F. Senault

Le 13 juin à 15:20, Alex Young a écrit :
Damjan Rems wrote:

Try File.new('att.tif','wb+').write(att). From memory, the 'b' in 'wb+'
turns off newline conversion.

Yep. From the PickAxe :

Mode Meaning
r Read-only, starts at beginning of file (default mode).
r+ Read/write, starts at beginning of file.
w Write-only, truncates an existing file to zero length or creates
a new file for writing.
w+ Read/write, truncates existing file to zero length or creates a
new file for reading and writing.
a Write-only, starts at end of file if file exists ; otherwise
creates a new file for writing.
a+ Read/write, starts at end of file if file exists ; otherwise
creates a new file for reading and writing.
b (DOS/Windows only) Binary file mode (may appear with any of the
key letters listed above).

I'd add that b has no effect whatsoever on other OSes. (In other words,
you may leave "wb+" and stay platform independent.)

Fred
 
R

Robert Klemme

Le 13 juin à 15:20, Alex Young a écrit :


Yep. From the PickAxe :

Mode Meaning
r Read-only, starts at beginning of file (default mode).
r+ Read/write, starts at beginning of file.
w Write-only, truncates an existing file to zero length or creates
a new file for writing.
w+ Read/write, truncates existing file to zero length or creates a
new file for reading and writing.
a Write-only, starts at end of file if file exists ; otherwise
creates a new file for writing.
a+ Read/write, starts at end of file if file exists ; otherwise
creates a new file for reading and writing.
b (DOS/Windows only) Binary file mode (may appear with any of the
key letters listed above).

I'd add that b has no effect whatsoever on other OSes. (In other words,
you may leave "wb+" and stay platform independent.)

That's what I would do for binary files. It also helps documenting.

Kind regards

robert
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,261
Messages
2,571,308
Members
47,976
Latest member
AlanaKeech

Latest Threads

Top