From: duerst@... Date: 2014-04-04T10:38:27+00:00 Subject: [ruby-core:61854] [ruby-trunk - Bug #1685] Some windows unicode path issues remain Issue #1685 has been updated by Martin D��rst. On 2014/04/03 23:07, thomas@thomthom.net wrote: > Issue #1685 has been updated by Thomas Thomassen. > In Ruby 2.0 there appear to still be several issues with Ruby and Unicode characters in filenames. Dir.entries fail, load and require fail. __FILE__ has the wrong encoding. I see some things slated for Ruby 2.2, but not everything. If you know of anything that's not yet in Ruby 2.2, please tell us, best by opening a bug for each issue. Regards, Martin. > ---------------------------------------- > Bug #1685: Some windows unicode path issues remain > https://bugs.ruby-lang.org/issues/1685#change-46061 > > * Author: B Kelly > * Status: Assigned > * Priority: Normal > * Assignee: Usaku NAKAMURA > * Category: M17N > * Target version: next minor > * ruby -v: ruby 1.9.2dev (2009-06-24) [i386-mswin32_71] > * Backport: > ---------------------------------------- > =begin > Hi, > > I see some nice progress has been made in unicode path > handling on windows. > > The following tests are not exhaustive, but do reveal some > remaining issues. > > Everything below "NOT WORKING" fails in one way or another. > > Regards, > > Bill > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > # encoding: UTF-8 > > # Test unicode path/dir handling on windows > > require 'test/unit' > > class TestUnicodeFilenamesAndPaths < Test::Unit::TestCase > def setup > tmpdir = ENV['TEMP'] || "C:/TEMP" > Dir.chdir tmpdir > puts Dir.pwd > testdir = "ruby_unicode_test" > Dir.mkdir testdir unless test ?d, testdir > Dir.chdir testdir > puts Dir.pwd > end > > def test_unicode_paths > fname_resume = "R\xC3\xA9sum\xC3\xA9".force_encoding("UTF-8") > fname_chinese = "\u52ec\u52ee\u52f1\u52f2.txt" > dname_chinese = "\u52ec\u52ee\u52f1\u52f2" > > assert_equal( "UTF-8", fname_resume.encoding.name ) > File.open(fname_resume, "w") {|io| io.puts "Hello, World"} > > assert_equal( "UTF-8", fname_chinese.encoding.name ) > File.open(fname_chinese, "w") {|io| io.puts "Hello, World"} > > dat = File.read(fname_chinese) > assert_equal( "Hello, World\n", dat ) > > files = Dir["*"] > assert( files.include? fname_resume ) > assert( files.include? fname_chinese ) > > # NOT WORKING: > Dir.rmdir dname_chinese rescue nil > Dir.mkdir dname_chinese > test ?d, dname_chinese > Dir.chdir dname_chinese > cwd = Dir.pwd > assert( cwd[(-dname_chinese.length)..-1] == dname_chinese ) > Dir.chdir ".." > > x = File.stat(fname_resume) > x = File.stat(fname_chinese) > x = File.stat(dname_chinese) > > assert( File.exist? fname_resume ) > assert( File.exist? fname_chinese ) > assert( test(?f, fname_resume) ) > assert( test(?f, fname_chinese) ) > > files = Dir[fname_resume] > assert_equal( fname_resume, files.first ) > files = Dir[fname_chinese] > assert_equal( fname_chinese, files.first ) > files = Dir[dname_chinese] > assert_equal( dname_chinese, files.first ) > end > end > =end > > > ---Files-------------------------------- > spatulasnout-unicode-mkdir-diffs.txt (3.56 KB) > test_io_unicode_paths.rb (925 Bytes) > > ---------------------------------------- Bug #1685: Some windows unicode path issues remain https://bugs.ruby-lang.org/issues/1685#change-46070 * Author: B Kelly * Status: Assigned * Priority: Normal * Assignee: Usaku NAKAMURA * Category: M17N * Target version: next minor * ruby -v: ruby 1.9.2dev (2009-06-24) [i386-mswin32_71] * Backport: ---------------------------------------- =begin Hi, I see some nice progress has been made in unicode path handling on windows. The following tests are not exhaustive, but do reveal some remaining issues. Everything below "NOT WORKING" fails in one way or another. Regards, Bill ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # encoding: UTF-8 # Test unicode path/dir handling on windows require 'test/unit' class TestUnicodeFilenamesAndPaths < Test::Unit::TestCase def setup tmpdir = ENV['TEMP'] || "C:/TEMP" Dir.chdir tmpdir puts Dir.pwd testdir = "ruby_unicode_test" Dir.mkdir testdir unless test ?d, testdir Dir.chdir testdir puts Dir.pwd end def test_unicode_paths fname_resume = "R\xC3\xA9sum\xC3\xA9".force_encoding("UTF-8") fname_chinese = "\u52ec\u52ee\u52f1\u52f2.txt" dname_chinese = "\u52ec\u52ee\u52f1\u52f2" assert_equal( "UTF-8", fname_resume.encoding.name ) File.open(fname_resume, "w") {|io| io.puts "Hello, World"} assert_equal( "UTF-8", fname_chinese.encoding.name ) File.open(fname_chinese, "w") {|io| io.puts "Hello, World"} dat = File.read(fname_chinese) assert_equal( "Hello, World\n", dat ) files = Dir["*"] assert( files.include? fname_resume ) assert( files.include? fname_chinese ) # NOT WORKING: Dir.rmdir dname_chinese rescue nil Dir.mkdir dname_chinese test ?d, dname_chinese Dir.chdir dname_chinese cwd = Dir.pwd assert( cwd[(-dname_chinese.length)..-1] == dname_chinese ) Dir.chdir ".." x = File.stat(fname_resume) x = File.stat(fname_chinese) x = File.stat(dname_chinese) assert( File.exist? fname_resume ) assert( File.exist? fname_chinese ) assert( test(?f, fname_resume) ) assert( test(?f, fname_chinese) ) files = Dir[fname_resume] assert_equal( fname_resume, files.first ) files = Dir[fname_chinese] assert_equal( fname_chinese, files.first ) files = Dir[dname_chinese] assert_equal( dname_chinese, files.first ) end end =end ---Files-------------------------------- spatulasnout-unicode-mkdir-diffs.txt (3.56 KB) test_io_unicode_paths.rb (925 Bytes) -- https://bugs.ruby-lang.org/