<?xml version="1.0" encoding="windows-1252"?>
<node id="789258" title="Re: Encode fails to install on Win32 5.6" created="2009-08-17 15:28:40" updated="2009-08-17 15:28:40">
<type id="11">
note</type>
<author id="45366">
belg4mit</author>
<data>
<field name="doctext">
Some code from [cpan://Text::FIGlet] might be of some use to you:

&lt;code&gt;
sub UTF8ord{
  my $str = shift || $_;
  my $len = length ($str);

  return ord($str) if $len == 1;
  #This is a FIGlet specific error value
  return 128       if $len &gt; 4 || $len == 0;

  my @n = unpack "C*", $str;
  $str  = (($n[-2] &amp; 0x3f) &lt;&lt;  6) + ($n[-1] &amp; 0x3f);
  $str += (($n[-3] &amp; 0x1f) &lt;&lt; 12) if $len ==3;
  $str += (($n[-3] &amp; 0x3f) &lt;&lt; 12) if $len ==4;
  $str += (($n[-4] &amp; 0x0f) &lt;&lt; 18) if $len == 4;
  return $str;
}

sub UTF8chr{
  my $ord = shift || $_;
  my @n;

  #x00-x7f        #1 byte
  if( $ord &lt; 0x80 ){ 
    @n = $ord; }
  #x80-x7ff       #2 bytes
  elsif( $ord &lt; 0x800 ){
    @n  = (0xc0|$ord&gt;&gt;6, 0x80|$ord&amp;0x3f ); }
  #x800-xffff     #3 bytes
  elsif( $ord &lt; 0x10000 ){
    @n  = (0xe0|$ord&gt;&gt;12, 
	   0x80|($ord&gt;&gt;6)&amp;0x3f,
	   0x80|$ord&amp;0x3f ); }
  #x10000-x10ffff #4 bytes
  elsif( $ord&lt;0x20000 ){
    @n = (0xf0|$ord&gt;&gt;18,
	  0x80|($ord&gt;&gt;12)&amp;0x3f,
	  0x80|($ord&gt;&gt;6)&amp;0x3f,
	  0x80|$ord&amp;0x3f); }
  else{
    warn "Out of range for UTF-8: $ord"; }

  return pack "C*", @n;
}
&lt;/code&gt;

I've tested it as far back as 5.00503 IIRC.

&lt;div class="pmsig"&gt;&lt;div class="pmsig-45366"&gt;
&lt;p&gt;
&lt;tt&gt;
-- &lt;br&gt;
In Bob We Trust, All Others Bring Data.
&lt;/tt&gt;
&lt;/div&gt;&lt;/div&gt;</field>
<field name="root_node">
789251</field>
<field name="parent_node">
789251</field>
</data>
</node>
