Hi! I had some encoding (actually decoding) issues when trying to read from a pipe, and I would like to check with some more experienced users if I'm doing something wrong, if it's intended behavior, or if it's a problem in perl.
The problem is that if I use "open ':locale'", the explicit encoding in the following code is ignored: open FH, '-| :encoding(ISO-8859-1)', 'cat', 'testfile'; Simplified but working test code to reproduce the issue: ------------------------------------------ 1 use open ':std', ':locale'; 2 open FH1, '< :encoding(ISO-8859-1)', 'testfile'; 3 open FH2, '-| :encoding(ISO-8859-1)', 'cat', 'testfile'; 4 <FH1>; 5 <FH2>; ------------------------------------------ Running this code when 'testfile' contains ISO-8859-1 characters causes line 5 to emit warnings about not being able to map to Unicode. The "<" version of the open is to demonstrate that the encoding works there. It correctly opens the file in ISO-8859-1 mode. The following code works: ------------------------------------------ 1 open FH2, '-| :encoding(ISO-8859-1)', 'cat', 'testfile'; 2 <FH2>; ------------------------------------------ To show that a pipe-open normally accepts the encoding layer, the following code breaks: ------------------------------------------ 1 open FH2, '-| :encoding(UTF-8)', 'cat', 'testfile'; 2 <FH2>; ------------------------------------------ So, is there a way around this? I really want to "use open ':locale'" to make sure everything is translated correctly on STDIN/OUT, but I also want to read from a pipe with a specific encoding. Using 'binmode' doesn't work either, the setting is ignored. I have a feeling I can solve it by wrapping the open/read in a block and change the ":std" setting temporarily, but it feels like a kludge. I would appreciate any comments on this! Kind regards, Anders Andersson