Cool, thanks!

On Sat, 15 Sep 2018 at 22:41, Brad Gilbert <b2gi...@gmail.com> wrote:

> I was just informed by samcv on #perl6-dev that she got the
> utf16 stream decoder implemented.
> http://colabti.org/irclogger/irclogger_log/perl6-dev?date=2018-09-15#l381
>
> It should be in the next release, so after that there won't be a reason
> to do the <latin1> dance I described earlier.
>
> The following should just work in the next release.
>
>     run $install-file, :out, :enc<utf16>
>
> On Thu, Sep 13, 2018 at 11:23 PM WFB <wbi...@gmx.at> wrote:
> >
> > Never mind. .lines gives back Str and thus .encode is needed...
> > Thanks again
> >
> > On Fri, 14 Sep 2018 at 06:20, WFB <wbi...@gmx.at> wrote:
> >>
> >> @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