in reply to Re: binmode STDOUT, ":utf8"; and umlauts
in thread binmode STDOUT, ":utf8"; and umlauts

find is simply producing whatever was put there. In Linux, file names are just byte strings which may be interpreted however the user wants. Thus, it is incumbent on the user to decide on a convention for encoding file names and then to stick to that convention.

This demonstrates what's going on:

#!/usr/bin/perl system("/bin/rm abc*"); system("/bin/ls"); # no files begin with "abc" my $name = "abc".chr(128); open(FOO, ">", $name); close(FOO); my $name2 = $name.chr(256); chop $name2; if ($name eq $name2) { print "\$name and \$name2 are ", ($name ne $name2 ? "not " : ""), "equal as perl strings\n"; } open(BAR, ">", $name2); close(BAR); system("/bin/ls"); # shows two files beginning with "abc"
perl is evidently passing its internal representation of $name and $name2 to the operating system's open() routine, and the OS is simply using that sequence of bytes as the file name.