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; > >>> } >