From: "Martin J. Dürst" Date: 2014-04-04T14:23:19+09:00 Subject: [ruby-core:61853] Re: [ruby-trunk - Bug #1685] Some windows unicode path issues remain 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) > >