UTF-8 in ASP pages on Windows CE

My "stuff to blog about" well has pretty much run dry, as anyone who follows this blog knows.  Fortunately there's always a customer running into something that I've never thought about something to inspire me.  Bad for the poor customer hitting the issue, but good for the rest of us.

A customer wasn't able to make ASP pages from CE Web Server work when the pages were UTF-8.  The same page had worked fine as ANSI.  The error they got was when setting <% Response.Expires = -1 %> in their page.

-----------------START

 

The HTTP headers are already written to the client. HTTP header

modifications must be made before writing page content

 

ASP scripting compilation error: '80020009'

 

Description:

 

In file: /Test/default.asp

On line: 1

 

-----------------END

ASP aficionados, can you guess what was happening?

--

What happens is UTF-8 puts special characters in the first bytes of a file indicating to an editor that it is UTF-8.  When our ASP interpreter parses out a page, it sees those UTF-8 characters and (unfortunately) doesn't know about UTF-8 and assumes its ASP body that needs to be sent out.  Once ASP body has been sent, you're not allowed to send HTTP headers anymore, which is why the Expires=-1 wasn't working.

I had the customer remove the special bytes and also look into the Response.Charset() to make sure the browser knew the encoding of the file (always a good idea with non-ANSI anyway).