Issue #12184 has been updated by Shyouhei Urabe.

Status changed from Open to Assigned
Assignee set to Nobuyoshi Nakada

Nobu will look into it.

----------------------------------------
Bug #12184: Cygwin LANG=ja_JP.SJIS 環境でコマンドライン引数に日本語が渡せない
https://bugs.ruby-lang.org/issues/12184#change-58049

* Author: Kazutoshi SATODA
* Status: Assigned
* Priority: Normal
* Assignee: Nobuyoshi Nakada
* ruby -v: ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-cygwin]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
Cygwin LANG=ja_JP.SJIS で ruby のコマンドライン引数に日本語を渡すと、
プログラム開始時点で ARGV 内の非 ASCII バイトがすべて "?" = 0x3F に置換
されてしまうようで、正しく動作しません。情報が潰れてしまっているので
プログラム側では対処不能な状態になります。

~~~
$ ruby -e 'a = ARGV[0]; p a, a.encoding, a.bytes' 'あ'
"??"
#<Encoding:Windows-31J>
[63, 63]
~~~

期待される結果は以下と同じ。

~~~
$ ruby -e 'a = "あ"; p a, a.encoding, a.bytes'
"あ"
#<Encoding:Windows-31J>
[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/