You probably don't need a general solution, in which case I was over complicating things. Take two.
If you're entering the file name by dragging and dropping, Windows should be encoding them using the console's code page, which means it's already properly encoded for use by open(). Don't do any decoding, and it should work.
If you follow the above advice and you also want to be able to enter the file name using STDIN or via @ARGV, you'll have to enter it as it shows up in the results of dir. It will be impossible to enter some exotic file names this way (without using it's short file name as shown in dir /x).
If this is unacceptable, let me know which aspects of it isn't.
If it doesn't work, run the following program, and give me the output and the name of the file as you see it in explorer ("My Computer" or the likes).
use strict; use warnings; use Data::Dumper qw( Dumper ); print("Enter file path> "); chomp( my $qfn = <STDIN> ); { local $Data::Dumper::Useqq = 1; local $Data::Dumper::Terse = 1; local $Data::Dumper::Indent = 0; print('$qfn=', Dumper($qfn), "\n"); } open(my $fh, '<', $qfn) or die("open $qfn: $!\n");
In reply to Re: Character encoding in console in Windows
by ikegami
in thread Character encoding in console in Windows
by elef
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |