Ticket #1793 (closed bug: invalid)

Opened 6 years ago

Last modified 6 years ago

FileHandles do not properly transcode strings

Reported by: pmichaud Owned by:
Priority: normal Milestone:
Component: core Version: 2.7.0
Severity: medium Keywords:
Cc: Language: perl6
Patch status: Platform:


The following program creates three strings with exactly the same (logical) 2-character contents and verifies that the strings are equal. However, when output to a filehandle set to use utf8 encoding, the strings produce different results -- the non-utf8 string isn't properly transcoded to the utf8 encoding used by the filehandle.

pmichaud@orange:~/parrot/trunk$ ./parrot_config revision
pmichaud@orange:~/parrot/trunk$ cat a.pir
.sub main :main
    # set output encoding to utf8
    $P0 = getstdin

    # Build three strings of two characters each
    .local string a, b, c
    a = unicode:"\x{c3}\x{a9}"           # U+00C3 followed by U+00A9

    $S0 = chr 0xc3
    $S1 = chr 0xa9
    b   = concat $S0, $S1                # U+00C3 followed by U+00A9

    c   = concat unicode:"", b           # U+00C3 followed by U+00A9

    # Show that they're all equal
    print "a eq b == "
    $I0 = iseq a, b
    say $I0

    print "a eq c == "
    $I0 = iseq a, c
    say $I0

    print "b eq c == "
    $I0 = iseq b, c
    say $I0

    # Display them
    say a
    say b
    say c

pmichaud@orange:~/parrot/trunk$ ./parrot a.pir
a eq b == 1
a eq c == 1
b eq c == 1

In the above sample run, I expect the last three lines to produce the same output since the strings themselves are equivalent. (One can do a hex dump of the output to verify that the middle string is different from the other two.)



Change History

in reply to: ↑ description   Changed 6 years ago by pmichaud

For tracking purposes, this ticket is linked to  http://rt.perl.org/rt3/Ticket/Display.html?id=77888 .


  Changed 6 years ago by nwellnhof

Try to change getstdin to getstdout in line 3 ;)

  Changed 6 years ago by pmichaud

  • status changed from new to closed
  • resolution set to invalid

Oooooops. Thanks for pointing out my obvious mistake. Closing ticket.


Note: See TracTickets for help on using tickets.