@Andreas Thanks, I was thinking to do that with regex by myself, but that
would be a ugly workaround and only as a last resort.

@Brad: Cool, thanks, I got the errors as well. But did not come up with
your solution. One question, though:
>> for $installer.out.lines.map(*.encode('latin1').decode('utf16')) ->
$line {
Why .encode? I would assume the IO::Handle is allready given back latin-1
because of the :enc<"latin-1"> in the Run command.

On Thu, 13 Sep 2018 at 18:20, Brad Gilbert <b2gi...@gmail.com> wrote:

> On Thu, Sep 13, 2018 at 7:22 AM WFB <wbi...@gmx.at> wrote:
> >
> > Hi all,
> >
> > My perl6 runs an executable and prints its output. This output is
> printed as multibyte string. I assume the executable gives back a multibyte
> string and perl6 interpret its as one byte string for whatever reasons.
> > I tried Run with different encodings like windows-1251, utf16 and so on.
> No luck.
> >
> > The string I get looks like that:
> > S e t t i n g   u p   f o l d e r   C : \ U s e r s \ w o l f
> > Hex:
> > 53 00 65 00 74 00 74 00 69 00 6E 00 67 00 20 00 75 00 70 00 20 00 66 00
> 6F 00 6C 00 64 00 65 00 72 00 20 00 43 00 3A 00 5C 00 55 00 73 00 65 00
> >
> > Here my program:
> >
> > my $installer = run $install-file, :out;
> > for $installer.out.lines -> $line {
> >     say $line;
> > }
> >
> > Any idea whats wrong here. A WIndows issue or do I something wrong?
> >
>
> Windows uses UTF16 encoding by default (which you see here), while
> Perl 6 uses UTF8 by default.
>
> You should be able to fix it by setting the encoding
> (Note that it should probably be set with :encoding<utf16>, but that
> doesn't work currently)
>
>     run $install-file, :out, :enc<utf16>
>
> Though I currently get an error from that.
>
>     Streaming decode NYI for encoding 4
>
> Also I'm sure I should be able to set it after that line, but it also
> produces an error
>
>     > my $installer = run $install-file, :out;
>     > $installer.out.encoding('utf16');
>     Cannot assign to an immutable value
>
> ---
>
> A work around is to use 'latin1' (almost binary) and use `.encode.decode`
>
>     my $installer = run $install-file, :out, :enc<latin1>;
>     for $installer.out.lines.map(*.encode('latin1').decode('utf16')) ->
> $line {
>         say $line;
>     }
>

Reply via email to