#!/usr/bin/perl use strict; use warnings; use Encode; use Data::Dumper; use Test::More qw(no_plan); binmode(STDOUT, ":utf8"); binmode(STDERR, ":utf8"); my $a = "\x{ae}"; my $b = "\x{ae}\x{2122}"; ok( ! Encode::is_utf8($a), '\x{ae} is not marked as utf-8' ); ok( Encode::is_utf8($b), '\x{ae}\x{2122} is marked as utf-8' ); ok( length $a == 1, '\x{ae} character length 1' ); ok( length $b == 2, '\x{ae}\x{2122} character length 2' ); ok( do { use bytes; length $a } == 1, '\x{ae} byte length 1' ); ok( do { use bytes; length $b } == 5, '\x{ae}\x{2122} byte length 5'); chop $b; ok( Encode::is_utf8($b), '$b still utf-8 after chop' ); ok( length $b == 1, '$b character length 1 after chop' ); ok( do { use bytes; length $b } == 2, '$b byte length 2 after chop' ); is( $a, $b, '$a eq $b after utf8 upgrade of $a' ); my $x = decode('iso-8859-1', $a ); ok( Encode::is_utf8($b), '$x is utf-8' ); ok( $x eq $b ); Encode::_utf8_off( $b ); Encode::_utf8_off( $x ); ok( $x eq $b ); is( $a, $b, '$a and $b are byte same' );