The character encoding is named in the http header.&nbsp; I&#39;ll bet it isn&#39;t exactly named the way that any of the converters would like, so you&#39;ll have to map it to what the converter expects.<br><br>Here&#39;s a snippet from the man page for WWW::Mech on getting the http headers.<br>
<pre style="font-family: arial,sans-serif;">my $mech = WWW::Mechanize-&gt;new( autocheck =&gt; 1 );<br>    $mech-&gt;get( &#39;<a href="http://my.site.com/" class="podlinkurl">http://my.site.com</a>&#39; );<br>    my $res = $mech-&gt;response();<br>
    for my $key ( $response-&gt;header_field_names() ) {<br>        print $key, &quot; : &quot;, $response-&gt;header( $key ), &quot;\n&quot;;<br>    }</pre><code style="font-family: arial,sans-serif;"><br>Here&#39;s the http header of interest:<br>
<br>Content-Type: text/html; charset=utf-8</code><div class="gmail_quote"><br>see <a href="http://www.w3.org/International/O-charset">http://www.w3.org/International/O-charset</a> and <a href="http://www.iana.org/assignments/character-sets">http://www.iana.org/assignments/character-sets</a>.<br>
<br>iconv is a utility for character conversions that seems to be available on most unixes.&nbsp; there may be more platform coverage for iconv.&nbsp; especially if your perl isn&#39;t always 5.8.1 and up.<br><br>latin1 is the same as iso-8859-1.<br>
<br>decide on the encoding in your program, and convert all inputs to that encoding.&nbsp; if latin1 and not utf8, you&#39;ll need to ensure some conversion happens when writing to postgres.&nbsp; you may find it easier to have postgres do the latin1-&gt;utf8 conversion, especially since the editor you use seems to like latin1.<br>
<br>so you want to be a utf8 purist.&nbsp; maybe a &quot;use utf8;&quot; at the top is best.&nbsp; use utf8::decode to convert inputs to utf8 with the utf8 flag set.&nbsp; make your ide use utf8 for editing and display.<br><br>-rob<br><br>
On Wed, Jul 9, 2008 at 7:59 AM, Madison Kelly &lt;<a href="mailto:linux@alteeve.com">linux@alteeve.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="Wj3C7c">Cees Hek wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On Wed, Jul 9, 2008 at 5:29 AM, Madison Kelly &lt;<a href="mailto:linux@alteeve.com" target="_blank">linux@alteeve.com</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi all, second question of the day!<br>
<br>
&nbsp;I&#39;ve got a problem INSERTing a value into my DB. It&#39;s a French character<br>
&#39;é&#39;, and my DB is set to UTF8, but the error is:<br>
<br>
INSERT INTO customer_data (cd_cust_id, cd_variable, cd_value, added_user,<br>
added_date, modified_user, modified_date) VALUES (1,<br>
&#39;CustServiceTypeDisplay_F&#39;, &#39;Résidence&#39;, 1, now(), 1, now());<br>
<br>
DBD::Pg::db do failed: ERROR: &nbsp;invalid byte sequence for encoding &quot;UTF8&quot;:<br>
0xe97369<br>
HINT: &nbsp;This error can also happen if the byte sequence does not match the<br>
encoding expected by the server, which is controlled by &quot;client_encoding&quot;.<br>
<br>
&nbsp;When I manually run the INSERT, it works, so I know the problem is in perl<br>
somewhere. Now then, I setup my script with this:<br>
<br>
# Setup for UTF-8 mode.<br>
binmode STDOUT, &quot;:utf8:&quot;;<br>
$ENV{&#39;PERL_UNICODE&#39;}=1;<br>
<br>
&nbsp;When I create my PgSQL connection, I use:<br>
<br>
$dbh=DBI-&gt;connect($db_connect_string, $$conf{db}{user}, $$conf{db}{pass},<br>
{<br>
 &nbsp; &nbsp; &nbsp; RaiseError =&gt; 1,<br>
 &nbsp; &nbsp; &nbsp; AutoCommit =&gt; 1,<br>
 &nbsp; &nbsp; &nbsp; pg_enable_utf8 =&gt; 1<br>
}<br>
) or die ...;<br>
<br>
&nbsp;I push a pile of queries into an array (referenced) and run them like this:<br>
<br>
# Sanity checks stripped for the email<br>
$dbh-&gt;begin_work;<br>
foreach my $query (@{$sql})<br>
{<br>
 &nbsp; &nbsp; &nbsp; print &quot;Query: [$query]\n&quot;;<br>
 &nbsp; &nbsp; &nbsp; $dbh-&gt;do($query) or $error.=$DBI::errstr.&quot;, &quot;;<br>
}<br>
$dbh-&gt;commit;<br>
<br>
&nbsp;Lastly, my database itself is set to UTF8:<br>
<br>
SET client_encoding = &#39;UTF8&#39;;<br>
<br>
&nbsp;I&#39;ve tried knocking out the &#39;pg_enable_utf8 =&gt; 1&#39; line in case I was<br>
dealing with double-encoding, but that didn&#39;t help.<br>
<br>
&nbsp;Any tips/ideas?<br>
</blockquote>
<br>
Hi Madison,<br>
<br>
You have told everything in the app that you are dealing only with<br>
UTF8 data, but somewhere you are getting data that is not in UTF8.<br>
What you didn&#39;t tell us is where that accented character came from.<br>
Was it from a file? &nbsp;Was it from a POST in a web request? &nbsp;Was it from<br>
another database? &nbsp;Was it entered on the commandline?<br>
<br>
Regardless of where it came from, this data source is not giving you<br>
UTF8 data, so you will have to convert it, or you need to get postgres<br>
to convert it for you. &nbsp;Luckily, postgresql is very good at handling<br>
this sort of thing for you. &nbsp;You have already mentioned that you<br>
called: &nbsp;SET client_encoding = &#39;UTF8&#39;. &nbsp;That tells postgres that<br>
everything you send it will be in UTF8. &nbsp;If you change that to SET<br>
client_encoding = &#39;LATIN1&#39;, then postgres will assume all data you<br>
send it is in LATIN1, and it will magically convert it to UTF8 for you<br>
before inserting it into the database (since your database is set to<br>
store UTF8 characters).<br>
<br>
Also remember that when you retrieve data from postgres, it also obeys<br>
the client_encoding setting, and it will convert all those UTF8<br>
characters back into LATIN1 for you.<br>
<br>
So what you need to find out is what encoding your source data is in,<br>
and then tell postgres that you are sending it in that encoding. &nbsp;it<br>
will do the dirty work for you.<br>
<br>
Alternatively you can use Rob&#39;s method of converting the data<br>
yourself. &nbsp;That should also work, and that would be the route you want<br>
to go if you want to use UTF8 throughout your entire application<br>
(which isn&#39;t that bad of an idea if you deal with lots of special<br>
characters).<br>
<br>
Cheers,<br>
<br>
Cees<br>
<br>
</blockquote>
<br></div></div>
Oh well, now don&#39;t I deserve a whack about the head? &gt;_&lt;<br>
<br>
I use &#39;WWW::Mechanize&#39; to grab data off of an SSL encrypted website. I&#39;ve not yet figured out a way to determine what encoding the website uses or, more relevantly, what encoding the WWW::Mechanize object uses. I had started looking into this when I sent the original email, but had a senior&#39;s moment and forgot to include that.<br>

<br>
Thus far, I&#39;ve tried reloading the database without the &#39;client_encoding&#39; pragma, without the &#39;pg_enable_utf8&#39;, without the &#39;binmode STDOUT, &quot;:utf8:&quot;;&#39; or &#39;$ENV{&#39;PERL_UNICODE&#39;}=1;&#39; and various combinations thereof in hopes that &quot;magic&quot; would happen, as much as I hate that, but it never worked. I do believe that &#39;LATIN1&#39; is the default, though I would need to confirm that.<br>

<br>
As I mentioned to Rob, I will play with the Encode module when I get into the office this morning. I *MUCH* prefer to handle conversions manually given the control freak I am. :) Joking aside, I do really want to control conversion myself so that I can honestly say that my program is fully UTF-8 through and through.<br>

<br>
Thanks kindly for your reply! I will report my success or failure &quot;for the record&quot;.<br>
<br>
Madi<div><div></div><div class="Wj3C7c"><br>
<br>
_______________________________________________<br>
toronto-pm mailing list<br>
<a href="mailto:toronto-pm@pm.org" target="_blank">toronto-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/toronto-pm" target="_blank">http://mail.pm.org/mailman/listinfo/toronto-pm</a><br>
</div></div></blockquote></div><br>