Convert UTF-8 String Classic ASP to SQL Database
Paul's answer isn't wrong but it is not the only part to consider:
You will need to go through each of these steps to make sure that you are getting consistent results;
IMPORTANT: These steps have to be performed on each and every page in your web application or you will have problems (emphasized by Paul's comment).
-
Each page needs to be saved using
UTF-8
encoding double check this as some IDEs will default toWindows-1252
(also often misnamed as "ANSI"). -
Each page will need the following line added as the very first line in the page, to make this easier I put this along with some other values in an include file so I can include them in each page as I go.
Include File - page_encoding.asp
<%@Language="VBScript" CodePage = 65001 %> <% Response.CharSet = "UTF-8" Response.CodePage = 65001 %>
Usage in the top of an ASP page (prefer to put in a config folder at the root of the web)
<!-- #include virtual="/config/page_encoding.asp" -->
Response.Charset = "UTF-8"
is the equivalent of setting the;charset
in the HTTPcontent-type
header.Response.CodePage = 65001
tell's ASP to process all dynamic strings asUTF-8
. -
Include files in the page will also have to be saved using
UTF-8
encoding (double check these also).
Follow these steps and your page will work, your problem at the moment is some pages are being interpreted as Windows-1252
while others are being treated as UTF-8
and you're ending up with a mis-match in encoding.
Normally - and that word has a veryyyyy long stretch - you do not need to convert on hand, even more it's discouraged. At the top off your asp page you write:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
that tell's ASP to send and to receive (from a server point of view) UTF-8. Furthermore it instructs the interpreter to use 2 byte strings. So when writing to a database or reading from a database everything goes auto-magically, so if your database uses 1 byte char
or 2 byte nchar
conversions are taken care of. And actually that's about it. You can test if all goes well by testing with this set:
áäÇçéčëíďńóöçÖöÚü
This set contains some 'European' but also some 'Unicode' chars... those Unicode will always fail if you use codepage 1252, so it's a nice test set.