From: nagachika00@... Date: 2016-04-23T18:23:16+00:00 Subject: [ruby-dev:49594] [Ruby trunk Bug#12184] Cygwin LANG=ja_JP.SJIS 環境でコマンドライン引数に日本語が渡せない Issue #12184 has been updated by Tomoyuki Chikanaga. Backport changed from 2.1: DONTNEED, 2.2: REQUIRED, 2.3: REQUIRED to 2.1: DONTNEED, 2.2: REQUIRED, 2.3: DONE ruby_2_3 r54736 merged revision(s) 54720. ---------------------------------------- Bug #12184: Cygwin LANG=ja_JP.SJIS 環境でコマンドライン引数に日本語が渡せない https://bugs.ruby-lang.org/issues/12184#change-58289 * Author: Kazutoshi SATODA * Status: Closed * Priority: Normal * Assignee: Nobuyoshi Nakada * ruby -v: ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-cygwin] * Backport: 2.1: DONTNEED, 2.2: REQUIRED, 2.3: DONE ---------------------------------------- Cygwin LANG=ja_JP.SJIS で ruby のコマンドライン引数に日本語を渡すと、 プログラム開始時点で ARGV 内の非 ASCII バイトがすべて "?" = 0x3F に置換 されてしまうようで、正しく動作しません。情報が潰れてしまっているので プログラム側では対処不能な状態になります。 ~~~ $ ruby -e 'a = ARGV[0]; p a, a.encoding, a.bytes' 'あ' "??" # [63, 63] ~~~ 期待される結果は以下と同じ。 ~~~ $ ruby -e 'a = "あ"; p a, a.encoding, a.bytes' "あ" # [130, 160] ~~~ LANG=ja_JP.UTF-8 なら問題ないようです。 ruby 2.0.x のときも 問題ありませんでした。 少し調べたところ、以下の変更で `defined __CYGWIN__` の場合に固定で `define UTF8_PATH 1` されるようになっていて、これと[実際の Cygwin の 動作](https://cygwin.com/cygwin-ug-net/setup-locale.html)( LANG に設定されたエンコーディングで argv が設定される)とが 合っていないせいで問題が起こってるんじゃないかと思ってます。 https://github.com/ruby/ruby/commit/33ea2646b98adb49ae2e1781753bf22d33729ac0 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ruby.c?r1=48648&r2=48647&pathrev=48648 -- https://bugs.ruby-lang.org/