Bug: grep behaves incorrectly under the locale C.UTF-8, if a file contains Umlaut characters

Ronald Fischer ynnor@mm.st
Wed May 24 08:30:00 GMT 2017


I have a file X which contains ASCII text, but also in some lines German
umlaut characters. The file is classified as:

     $ file X
     X: ISO-8859 text, with CRLF line terminators

If I grep the file using, say,

     $ grep  .  X  >Y

(i.e. select every non-empty line and write the result to Y), this works
fine, if LANG is set to one of: UTF-8, C, C.de_DE, C.en_EN, en_EN,
de_DE.

However, if LANG is set to C.UTF-8, two things happen:

- grep classifies the file as binary file and produces the error message
"Binary file X matches" 

- Both the grepped lines (i.e. in our example the non-empty lines) AND
the error message end up in the standard output (i.e. in file Y).

IMO, there are several problems with this:

1. It's hard to see, why an umlaut character makes the file X binary
under encoding C.UTF-8, but not under encoding UTF-8 or C.en_EN

2. If grep classifies a file as binary, I think the desired behaviour
would be to NOT produce any output, unless the -a flag has been
supplied.

3. If grep writes a message "Binary file ... matches", this message
should go to stderr, not stdout. The stdout is supposed to contain only
a subset of the input lines.
 Ronald
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cygcheck.out
Type: application/octet-stream
Size: 46425 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin/attachments/20170524/357e1af3/attachment.obj>
-------------- next part --------------

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


More information about the Cygwin mailing list