<div dir="ltr"><br><div class="gmail_quote">On Mon, Feb 13, 2012 at 12:30 PM, Issac Goldstand <span dir="ltr">&lt;<a href="mailto:margol@beamartyr.net">margol@beamartyr.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
If there&#39;s one thing I can never seem to get straight, it&#39;s character<br>
encodings...<br>
<br>
I&#39;m trying to parse some data from the web which can come in different<br>
encodings, and write unit tests which come from static files.<br>
<br>
One of the strings that I&#39;m trying to test for is &quot;Forex Trading Avec<br>
100€&quot;  The string is originally encoded (supposedly) in ISO-8859-1 based<br>
on the header Content-Type: text/html; charset=ISO-8859-1 and presence<br>
of the following META tag &lt;meta http-equiv=&quot;Content-Type&quot;<br>
content=&quot;text/html; charset=ISO-8859-1&quot;&gt;<br>
<br></blockquote><div><br></div>When dealing with encoding problems, it&#39;s helpful to isolate the problem as much as you can. Every piece that reports on an encoding can get it wrong, and the fact that both the server and the document claim it&#39;s 8859-1 doesn&#39;t mean it they aren&#39;t lying. So start by fetching the document in raw form with curl or wget, and open that with &quot;od -t x1a&quot;.<br>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
(N.B. I&#39;m a bit confused by that as IIRC, ISO-8859-1 doesn&#39;t contain the<br>
EUR character...)<br>
<br></blockquote><div><br></div><div>The standard predates the currency.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
When opening the source code in a text editor as either ISO-8859-1 or<br>
ISO-8859-15 (or even UTF-8), I can&#39;t see the character.  I *do* see the<br>
character when viewing it as CP1255 which kinda worries me, as I get the<br>
feeling I&#39;m a lot farther from the source as I think when I see that...<br>
<br></blockquote><div><br></div><div>Sounds like you actually have the problem in your hands: somebody misencoded the data.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

My unit test for above test is as following:<br>
<br>
use utf8; # String literals contain UTF-8 in this file<br>
binmode STDOUT &quot;:utf8&quot;;<br>
...<br>
open($fh, &quot;&lt;:encoding(ISO-8859-1)&quot;, &quot;t/html0004.html&quot;) || die &quot;...: $!&quot;;<br>
$parser-&gt;parse_file($fh); # Subclassed HTML::Parser<br>
...<br>
is($test-&gt;{top}, &quot;Forex Trading Avec 100€&quot;, &quot;Correct headline text&quot;);<br></blockquote><div><br></div><div>If you tweak your code to use cp1255 (which encodes Euro as 0x80), does it pass? I expect it should, confirming the problem. </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
However, this test does not pass on the EURO, giving me the following<br>
result:<br>
Wide character in print at /usr/local/share/perl/5.12.4/Test/Builder.pm<br>
line 1759.<br>
#          got: &#39;Forex Trading Avec 100€&#39;<br>
#     expected: &#39;Forex Trading Avec 100€&#39;<br>
<br>
Both the warning and the mismatch bother me....  The warning, because I<br>
assumed that opening STDOUT as a utf8 stream would deal with it.  And<br>
the mismatch, because I can&#39;t figure why it&#39;s mismatching...<br>
<br></blockquote><div><br></div><div>I&#39;m not sure why you&#39;re getting the warning, since you are indeed setting the encoding with binmode. Try rerunning with env PERL_UNICODE=0 to prevent perl from making any assumptions. Could your test be running in a BEGIN block for some crazy reason?</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
FWIW, when doing this on the web, I&#39;d planned on converting to utf-8 by<br>
using HTTP::Response&#39;s $res-&gt;decoded_content to deal with the encoding<br>
for me, but that seems to be spewing characters that... don&#39;t look<br>
correct... too :/<br>
<br>
Any ideas?<br>
<br>
  Yitzchak<br>
_______________________________________________<br>
Perl mailing list<br>
<a href="mailto:Perl@perl.org.il">Perl@perl.org.il</a><br>
<a href="http://mail.perl.org.il/mailman/listinfo/perl" target="_blank">http://mail.perl.org.il/mailman/listinfo/perl</a></blockquote></div><br><br clear="all"><div><br></div>-- <br>Gaal Yahas &lt;<a href="mailto:gaal@forum2.org">gaal@forum2.org</a>&gt;<br>
<a href="http://gaal.livejournal.com/">http://gaal.livejournal.com/</a><br>
</div>