Sandra Schlichting
Sandra Schlichting

Reputation: 25986

Getting latin1 instead of UTF-8 with CGI::Application

I am using CGI::Application with UTF-8 data.

In the HTML have I set encoding to UTF-8 like so

<!DOCTYPE html>
<html dir="ltr">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>

but the output is treated as latin1, as special characters are displayed as 2 characters.

Page Info in Firefox says the page is encoded with ISO-8859-1 despite the HTML header.

I have only been able to find these two posts about the problem, but they are old and very complicated.

Anyone that have solved this problem?

Update: Here are the HTTP header from FireBug.

Response Headers
Date    Tue, 26 Apr 2011 09:53:24 GMT
Server  Apache/2.2.3 (CentOS)
Connection  close
Transfer-Encoding   chunked
Content-Type    text/html; charset=ISO-8859-1

Request Headers
Host    example.com
User-Agent  Mozilla/5.0 (X11; Linux x86_64; rv:2.0) Gecko/20100101 Firefox/4.0
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-gb,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive

I noticed that if I force UTF-8 by FireFox->Web Developer->Character Encoding->Unicode (UTF-8), if looks correct.

Upvotes: 3

Views: 3909

Answers (1)

Quentin
Quentin

Reputation: 943548

Your HTTP headers:

Content-Type text/html; charset=ISO-8859-1

… claim the document is encoded as Latin 1. Real HTTP headers take priority over HTML <meta> data.

$webapp->header_add(-type => 'text/html; charset=UTF-8');

… should do the job if I'm reading the documentation correctly.

Upvotes: 5

Related Questions