$ perl -E 'mkdir("\x{100}")'
$ perl -MB -E 'my @d= <*>; say B::perlstring($_) for @d'
"\304\200"
$ perl -E 'my ($d)= <*>; open(my $f, ">", "$d/\x{101}.txt") or die "$!"'
No such file or directory at -e line 1.
####
$ python2.7
Python 2.7.18 (default, Oct 10 2021, 22:29:32)
[GCC 11.1.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> l=os.listdir(".")
>>> l
['\xc4\x80']
>>> l=os.listdir(u".")
>>> l
[u'\u0100']
####
$ perl -MB -E 'open(my $f, ">", "\x{C4}\x{80}\x{A0}.txt") or die "$!"'
$ python2.7
Python 2.7.18 (default, Oct 10 2021, 22:29:32)
[GCC 11.1.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> l=os.listdir('.')
>>> l
['\xc4\x80\xa0.txt', '\xc4\x80']
>>> l=os.listdir(u'.')
>>> l
['\xc4\x80\xa0.txt', u'\u0100']
####
>>> open(l[1]+'/'+l[0], 'w')
Traceback (most recent call last):
File "", line 1, in
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)
####
$ python3
Python 3.11.3 (main, Jun 5 2023, 09:32:32) [GCC 13.1.1 20230429] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> l=os.listdir('.')
>>> l
['Ā\udca0.txt', 'Ā']
>>>
####
>>> open(l[1]+'/'+l[0], "w")
<_io.TextIOWrapper name='Ā/Ā\udca0.txt' mode='w' encoding='UTF-8'>
>>> l=os.listdir('\u0100')
>>> l
['Ā\udca0.txt']
^d
$ perl -E '
sub escapestr {
$_[0] =~ s/([^\x20-\x7E])/sprintf("\\x%02X", ord $1)/egr
}
say escapestr($_) for <\x{100}/*>'
\xC4\x80/\xC4\x80\xA0.txt
####
use feature 'unicodefilenames';
my ($d)= <*>;
open(my $f, ">", "$d/\x{101}.txt") or die "$!";
####
package New;
use v5.42;
use feature 'unicodefilenames';
Old->foo($_) for <*>;
package Old;
use v5.38;
sub foo($fname) {
open my $fh, "<", $fname;
}
####
package New;
use v5.42;
use feature 'unicodefilenames';
Old->foo($_) for <*>;
package Old;
use v5.38;
sub foo($fname) {
my $dir= "tmp\x{85}";
mkdir $dir or die "$!";
system("cp -a $fname $dir/$fname") == 0 or die "$!";
}
####
$ python3
Python 3.11.3 (main, Jun 5 2023, 09:32:32) [GCC 13.1.1 20230429] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
(Wrapped for readability)
>>> subprocess.run([
'perl','-E',
'sub escapestr {
$_[0] =~ s/([^\x20-\x7E])/sprintf("\\x%02X", ord $1)/egr
}
say escapestr($ARGV[0])',
"\x80"])
C280
>>> subprocess.run([
'perl','-E',
'sub escapestr {
$_[0] =~ s/([^\x20-\x7E])/sprintf("\\x%02X", ord $1)/egr
}
say escapestr($ARGV[0])',
"\x80"])
80
####
package New;
use v5.36;
use Path::UTiny; # imagine a unicode-aware Path::Tiny
# Create directory named "\xC4\x80"
path("\x{100}")->mkdir;
for (path(".")->children) {
# compares as unicode
Old->foo($_) if $_->name eq /\x{100}/;
}
package Old;
use v5.36;
sub foo($dir) {
# stringify to bytes, creates file "\xC4\x80/\x80.txt"
open my $f, '>', "$dir/\x80.txt";
}
####
$path= path("$path/$unicode")