Forum: Ruby-dev [ruby-trunk - Bug #6698][Open] MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている

Posted by imkira (Mario Freitas) (Guest)
on 2012-07-04 12:42
(Received via mailing list)
Issue #6698 has been reported by imkira (Mario Freitas).

----------------------------------------
Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている
https://bugs.ruby-lang.org/issues/6698

Author: imkira (Mario Freitas)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0]


MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。

=begin
(({Dir.glob('*.{jpg,png}') do |filename|
 puts "#{filename} #{filename.encoding}"
end
}))

「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。

表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。

(({filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")}))

これって、Dir.globの不具合ですかそれとも正しい動きですか?
Posted by imkira (Mario Freitas) (Guest)
on 2012-07-04 12:44
(Received via mailing list)
Issue #6698 has been updated by imkira (Mario Freitas).


redmineのcode blockを使ってみましたが、表示おかしくなりましたT_T
----------------------------------------
Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている
https://bugs.ruby-lang.org/issues/6698#change-27796

Author: imkira (Mario Freitas)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0]


MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。

=begin
(({Dir.glob('*.{jpg,png}') do |filename|
 puts "#{filename} #{filename.encoding}"
end
}))

「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。

表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。

(({filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")}))

これって、Dir.globの不具合ですかそれとも正しい動きですか?
Posted by sorah (Shota Fukumori) (Guest)
on 2012-07-04 13:50
(Received via mailing list)
Issue #6698 has been updated by sorah (Shota Fukumori).

Description updated


----------------------------------------
Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている
https://bugs.ruby-lang.org/issues/6698#change-27797

Author: imkira (Mario Freitas)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0]


=begin
MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。

 Dir.glob('*.{jpg,png}') do |filename|
  puts "#{filename} #{filename.encoding}"
 end

「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。

表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。

 filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")

これって、Dir.globの不具合ですかそれとも正しい動きですか?
=end
Posted by sorah (Shota Fukumori) (Guest)
on 2012-07-04 13:50
(Received via mailing list)
Issue #6698 has been updated by sorah (Shota Fukumori).


imkira (Mario Freitas) wrote:
> redmineのcode blockを使ってみましたが、表示おかしくなりましたT_T

直しておきました。RD のフォーマットを有効にするには =begin, =end で囲う必要があります 
(RDボタンを押すとそれで全体が囲われるはずです)
----------------------------------------
Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている
https://bugs.ruby-lang.org/issues/6698#change-27798

Author: imkira (Mario Freitas)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0]


=begin
MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。

 Dir.glob('*.{jpg,png}') do |filename|
  puts "#{filename} #{filename.encoding}"
 end

「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。

表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。

 filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")

これって、Dir.globの不具合ですかそれとも正しい動きですか?
=end
Posted by imkira (Mario Freitas) (Guest)
on 2012-07-04 16:22
(Received via mailing list)
Issue #6698 has been updated by imkira (Mario Freitas).


ありがとうございました。
こちらの良く使うredmineのバージョンでは、Updateリンクを推してMoreというリンクが出てそこで編集できます。
このredmineのバージョンではMoreというリンクが存在しないので編集しませんでしたT_T
----------------------------------------
Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている
https://bugs.ruby-lang.org/issues/6698#change-27805

Author: imkira (Mario Freitas)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0]


=begin
MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。

 Dir.glob('*.{jpg,png}') do |filename|
  puts "#{filename} #{filename.encoding}"
 end

「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。

表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。

 filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")

これって、Dir.globの不具合ですかそれとも正しい動きですか?
=end
Posted by sorah (Shota Fukumori) (Guest)
on 2012-07-04 16:55
(Received via mailing list)
Issue #6698 has been updated by sorah (Shota Fukumori).

File utf8_mac_for_filesystem_encoding_on_osx.diff added
Assignee set to naruse (Yui NARUSE)

仮に不具合として、OS X 環境では UTF8-MAC にするパッチを添付します。

imkira (Mario Freitas) wrote:
> このredmineのバージョンではMoreというリンクが存在しないので編集しませんでしたT_T

more は適切な権限がないと見えないみたいですね。


----------------------------------------
Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている
https://bugs.ruby-lang.org/issues/6698#change-27807

Author: imkira (Mario Freitas)
Status: Open
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0]


=begin
MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。

 Dir.glob('*.{jpg,png}') do |filename|
  puts "#{filename} #{filename.encoding}"
 end

「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。

表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。

 filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")

これって、Dir.globの不具合ですかそれとも正しい動きですか?
=end
Posted by Nobuyoshi Nakada (nobu)
on 2012-07-05 03:10
(Received via mailing list)
Issue #6698 has been updated by nobu (Nobuyoshi Nakada).


NO_LOCALE_CHARMAPはminiruby用に必須なので、その外に条件を追加するのはダメです。
----------------------------------------
Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている
https://bugs.ruby-lang.org/issues/6698#change-27815

Author: imkira (Mario Freitas)
Status: Open
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0]


=begin
MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。

 Dir.glob('*.{jpg,png}') do |filename|
  puts "#{filename} #{filename.encoding}"
 end

「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。

表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。

 filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")

これって、Dir.globの不具合ですかそれとも正しい動きですか?
=end
Posted by kosaki (Motohiro KOSAKI) (Guest)
on 2012-07-05 05:39
(Received via mailing list)
Issue #6698 has been updated by kosaki (Motohiro KOSAKI).


OS X じゃないMacはもうサポートしてないしサポートを復活させるのも技術難易度的に不可能だと思うので

#if defined(__APPLE__) && ( defined(__MACH__) || defined(__DARWIN__) )

は __APPLE__ だけでいいと思います。いま 
grepした感じだと現在のリポジトリで7割ぐらいは__APPLE__だけ、残り3割が__MACH__とのAND条件、process.c 
に1つだけ旧Macの考慮が残っている感じっぽい
----------------------------------------
Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている
https://bugs.ruby-lang.org/issues/6698#change-27820

Author: imkira (Mario Freitas)
Status: Open
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0]


=begin
MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。

 Dir.glob('*.{jpg,png}') do |filename|
  puts "#{filename} #{filename.encoding}"
 end

「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。

表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。

 filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")

これって、Dir.globの不具合ですかそれとも正しい動きですか?
=end
Posted by sorah (Shota Fukumori) (Guest)
on 2012-07-05 08:45
(Received via mailing list)
Issue #6698 has been updated by sorah (Shota Fukumori).

File utf8_mac_for_filesystem_encoding_on_osx2.diff added

patch 更新しました
----------------------------------------
Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている
https://bugs.ruby-lang.org/issues/6698#change-27823

Author: imkira (Mario Freitas)
Status: Open
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0]


=begin
MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。

 Dir.glob('*.{jpg,png}') do |filename|
  puts "#{filename} #{filename.encoding}"
 end

「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。

表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。

 filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")

これって、Dir.globの不具合ですかそれとも正しい動きですか?
=end
Posted by naruse (Yui NARUSE) (Guest)
on 2012-07-05 09:10
(Received via mailing list)
Issue #6698 has been updated by naruse (Yui NARUSE).

Status changed from Open to Rejected

imkira (Mario Freitas) wrote:
> MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。
>
>  Dir.glob('*.{jpg,png}') do |filename|
>   puts "#{filename} #{filename.encoding}"
>  end
>
> 「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。
>
> これって、Dir.globの不具合ですかそれとも正しい動きですか?

正しい動きです。

Ruby 1.9 当初はまさに imkira さんの期待なさっている通り UTF8-MAC で返していたのですが、
それだと今回の濁点やアクセント記号を含んでいない場合に UTF-8 と異なるせいで色々不便なので、
r23308 にて UTF-8 で返すように変更しました。

ので、これは意図的なので、後述の通り変換してください。

> 表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

同じエンコーディングでも普通に比較すれば違うものなので失敗するので、どちらにしろ変換しないとダメなのです。

> Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。
>
>  filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")

ちなみにこれは
  filename.encode!("UTF-8", "UTF8-MAC")
と書けます。
----------------------------------------
Bug #6698: MacOSXではDir.globが返すファイル名の内容はUTF8-MACですがencodingがUTF-8になっている
https://bugs.ruby-lang.org/issues/6698#change-27824

Author: imkira (Mario Freitas)
Status: Rejected
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2011-08-02 revision 32803) [x86_64-darwin10.8.0]


=begin
MacOSXでは、「だ」など濁点が含まれているファイル名をDir.globで調べると返ってくるencodingが間違っているようです。

 Dir.glob('*.{jpg,png}') do |filename|
  puts "#{filename} #{filename.encoding}"
 end

「だ」というファイル名はUTF-8というencodingを使った"\u305F\u3099"と返ってきます。

表示的に"\u305F\u3099"を"\u3060"と比較すれば同じものなんですが、それぞれ違うencodingになっているため当然比較は失敗します。

Dir.globが返したfilenameを下記のようにすると正常に比較が出来るようになります。

 filename = filename.force_encoding("UTF8-MAC").encode("UTF-8")

これって、Dir.globの不具合ですかそれとも正しい動きですか?
=end
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.