Hi all, I'm trying to get a little app running which receives filenames via drag and drop. While it mostly runs fine, when I'm dropping a file with e.g. german umlauts or french accents (è, é), I'm not able to open the file given by the droptarget-class. Seemingly the special characters get corrupted. See the small attached program to reproduce my problem. I condensed it to the absolute minimum to evoke the error. Thanks in advance for every hint and forgive me if that's a noobs question! Cheers, Raskolnikov. ruby 1.8.6 wxruby (2.0.0, 1.9.9) Attachments: http://www.ruby-forum.com/attachment/3393/testfolder.zip -- Posted via http://www.ruby-forum.com/. _______________________________________________ wxruby-users mailing list wxruby-users@rubyforge.org http://rubyforge.org/mailman/listinfo/wxruby-users
Alex Fenton
2009-Mar-04 23:41 UTC
[wxruby-users] Incompatible encoding from drag and drop?
Christian Schmidt wrote:> I''m trying to get a little app running which receives filenames via drag > and drop. While it mostly runs fine, when I''m dropping a file with e.g. > german umlauts or french accents (?, ?), I''m not able to open the file > given by the droptarget-class. Seemingly the special characters get > corrupted. >You need to be sure that the text content of the file you''re dropping in is in UTF-8 encoding. You should be able to set this in a text editor. If the text isn''t in UTF-8, you can read it then convert it to UTF-8 using Ruby''s iconv library.> See the small attached program to reproduce my problem. I condensed it > to the absolute minimum to evoke the error.Also, you should return true or false from on_drop_files, to signal to wxRuby whether or not the drop files action succeeded. hth alex
Christian Schmidt
2009-Mar-05 09:14 UTC
[wxruby-users] Incompatible encoding from drag and drop?
Hi Alex, thank you for the reply! The Problem isn''t reading the file but opening it...! The program throws an exception if, for instance, you try to drop the file in the attached zip onto it. My program will read in mp3-files and examine them with id3lib-ruby, so I don''t have influence on the file''s contents anyway. Thanks in advance, Christian. Alex Fenton wrote:> Christian Schmidt wrote: >> I''m trying to get a little app running which receives filenames via drag >> and drop. While it mostly runs fine, when I''m dropping a file with e.g. >> german umlauts or french accents (?, ?), I''m not able to open the file >> given by the droptarget-class. Seemingly the special characters get >> corrupted. >> > > You need to be sure that the text content of the file you''re dropping in > is in UTF-8 encoding. You should be able to set this in a text editor. > > If the text isn''t in UTF-8, you can read it then convert it to UTF-8 > using Ruby''s iconv library. > >> See the small attached program to reproduce my problem. I condensed it >> to the absolute minimum to evoke the error. > > Also, you should return true or false from on_drop_files, to signal to > wxRuby whether or not the drop files action succeeded. > > hth > alex-- Posted via http://www.ruby-forum.com/.
Alex Fenton
2009-Mar-05 16:34 UTC
[wxruby-users] Incompatible encoding from drag and drop?
Christian Schmidt wrote:> The Problem isn''t reading the file but opening it...! The program throws > an exception if, for instance, you try to drop the file in the attached > zip onto it.OK - it helps if you post the error message you get so we can see what''s going wrong. I have a file whose name has accented characters, and it works fine for me (Ruby 1.8, 1.9, OS X, wxRuby 2.0.0). Can you say what platform and version of wxRuby you''re using? alex
Christian Schmidt
2009-Mar-05 19:17 UTC
[wxruby-users] Incompatible encoding from drag and drop?
Hi again, it really works on your box? Ok, on my system, when I use the example file, it throws: "No such file or directory - C:\?????.txt" I''m working on XP-Home, SP3. German locales ruby -v: ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] gem list wxruby: wxruby (2.0.0, 1.9.9) Looking forward to your answer, Christian. Alex Fenton wrote:> Christian Schmidt wrote: >> The Problem isn''t reading the file but opening it...! The program throws >> an exception if, for instance, you try to drop the file in the attached >> zip onto it. > > OK - it helps if you post the error message you get so we can see what''s > going wrong. > > I have a file whose name has accented characters, and it works fine for > me (Ruby 1.8, 1.9, OS X, wxRuby 2.0.0). Can you say what platform and > version of wxRuby you''re using? > > alex-- Posted via http://www.ruby-forum.com/.
Alex Fenton
2009-Mar-06 15:07 UTC
[wxruby-users] Incompatible encoding from drag and drop?
Christian Schmidt wrote:> it really works on your box? >Yes, the reason being that in OS X, file names are encoded in UTF-8, and this is the encoding of the string file name that wxRuby returns.> Ok, on my system, when I use the example file, it throws: > > "No such file or directory - C:\?????.txt" > > I''m working on XP-Home, SP3. German locales > ruby -v: ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]On Windows, file names aren''t encoded in UTF-8, but in a local encoding (for me, and probably you, CP1252). So the filename returned by wxRuby doesn''t exist. I think we should fix this so that wxRuby methods that accept or return file paths return those strings in an encoding that can be passed straight to Ruby''s File/Dir methods. In the meantime, you can work around this by manually converting the filepaths to the correct encoding before opening them: require ''iconv'' # at the top of your script files.each do | file | if Wx::PLATFORM == ''WXMSW'' file = Iconv.conv(''CP1252'', ''UTF-8'', file) end .... process file as normal end alex
Christian Schmidt
2009-Mar-07 10:18 UTC
[wxruby-users] Incompatible encoding from drag and drop?
Hi Alex, thanks a lot! It works like a charm. Have a nice weekend, Christian. Alex Fenton wrote:> Christian Schmidt wrote: >> it really works on your box? >> > > Yes, the reason being that in OS X, file names are encoded in UTF-8, and > this is the encoding of the string file name that wxRuby returns. >> Ok, on my system, when I use the example file, it throws: >> >> "No such file or directory - C:\?????.txt" >> >> I''m working on XP-Home, SP3. German locales >> ruby -v: ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] > > On Windows, file names aren''t encoded in UTF-8, but in a local encoding > (for me, and probably you, CP1252). So the filename returned by wxRuby > doesn''t exist. > > I think we should fix this so that wxRuby methods that accept or return > file paths return those strings in an encoding that can be passed > straight to Ruby''s File/Dir methods. > > In the meantime, you can work around this by manually converting the > filepaths to the correct encoding before opening them: > > require ''iconv'' # at the top of your script > > files.each do | file | > if Wx::PLATFORM == ''WXMSW'' > file = Iconv.conv(''CP1252'', ''UTF-8'', file) > end > .... process file as normal > end > > alex-- Posted via http://www.ruby-forum.com/.