rtomayko / posix-spawn

Ruby process spawning library
Other
520 stars 52 forks source link

Bug with out encoding in Cygwin #79

Closed leoniv closed 7 years ago

leoniv commented 7 years ago

Cygwin 2.0.4(0.287/5/3) 2015-06-09 12:20 i686

POSIX::Spawn::VERSION => "0.3.13"

I have a directory tree which has Russian names.

Calling system 'ls -la' returns:

drwxrwxr-x+ 1 vlv Пользователи домена   0 апр 26 15:28 .
drwxrwx---+ 1 vlv Пользователи домена   0 апр 26 12:47 ..
drwxrwxr-x+ 1 vlv Пользователи домена   0 апр 26 15:28 .git
-rw-rwxr--+ 1 vlv Пользователи домена 401 апр 26 15:28 home.md
drwxrwxr-x+ 1 vlv Пользователи домена   0 апр 26 15:21 Прикладные-объекты
drwxrwxr-x+ 1 vlv Пользователи домена   0 апр 26 15:17 Справочники

But calling POSIX::Spawn::Child.new('ls', '-la').out returns:

] pry(#<Grit::Git>)> POSIX::Spawn::Child.new('ls', '-la').out
=> "\xD0\xB8\xD1\x82\xD0\xBE\xD0\xB3\xD0\xBE 1\ndrwxrwxr-x+ 1 vlv \xD0\x9F\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xB7\xD0\xBE\xD0\xB2\xD0\xB0\xD1\x82\xD0\xB5\xD0\xBB\xD0\xB8 \xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB5\xD0\xBD\xD0\xB0   0 \xD0\xB0\xD0\xBF\xD1\x80 26 15:28 .\ndrwxrwx---+ 1 vlv \xD0\x9F\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xB7\xD0\xBE\xD0\xB2\xD0\xB0\xD1\x82\xD0\xB5\xD0\xBB\xD0\xB8 \xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB5\xD0\xBD\xD0\xB0   0 \xD0\xB0\xD0\xBF\xD1\x80 26 12:47 ..\ndrwxrwxr-x+ 1 vlv \xD0\x9F\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xB7\xD0\xBE\xD0\xB2\xD0\xB0\xD1\x82\xD0\xB5\xD0\xBB\xD0\xB8 \xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB5\xD0\xBD\xD0\xB0   0 \xD0\xB0\xD0\xBF\xD1\x80 26 15:28 .git\n-rw-rwxr--+ 1 vlv \xD0\x9F\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xB7\xD0\xBE\xD0\xB2\xD0\xB0\xD1\x82\xD0\xB5\xD0\xBB\xD0\xB8 \xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB5\xD0\xBD\xD0\xB0 401 \xD0\xB0\xD0\xBF\xD1\x80 26 15:28 home.md\ndrwxrwxr-x+ 1 vlv \xD0\x9F\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xB7\xD0\xBE\xD0\xB2\xD0\xB0\xD1\x82\xD0\xB5\xD0\xBB\xD0\xB8 \xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB5\xD0\xBD\xD0\xB0   0 \xD0\xB0\xD0\xBF\xD1\x80 26 15:21 \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBA\xD0\xBB\xD0\xB0\xD0\xB4\xD0\xBD\xD1\x8B\xD0\xB5-\xD0\xBE\xD0\xB1\xD1\x8A\xD0\xB5\xD0\xBA\xD1\x82\xD1\x8B\ndrwxrwxr-x+ 1 vlv \xD0\x9F\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xB7\xD0\xBE\xD0\xB2\xD0\xB0\xD1\x82\xD0\xB5\xD0\xBB\xD0\xB8 \xD0\xB4\xD0\xBE\xD0\xBC\xD0\xB5\xD0\xBD\xD0\xB0   0 \xD0\xB0\xD0\xBF\xD1\x80 26 15:17 \xD0\xA1\xD0\xBF\xD1\x80\xD0\xB0\xD0\xB2\xD0\xBE\xD1\x87\xD0\xBD\xD0\xB8\xD0\xBA\xD0\xB8\n"
 POSIX::Spawn::Child.new('ls', '-la').out.encoding => #<Encoding:ASCII-8BIT>

It will be cause of problem:

"#{POSIX::Spawn::Child.new('ls', '-la').out} текст по Русски"
Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8

Thx

tmm1 commented 7 years ago

This is the intended behavior. If you know that the output is UTF-8, then you can use out.encode('utf-8') or out.force_encoding('utf-8')

leoniv commented 7 years ago

I'm right understood? It isn't bug it's feature @out.force_encoding('BINARY').

Why?