4 votes

Comment convertir les données UTF-8 d'un post asp Form classique en UCS-2 pour les insérer dans SQL Server 2008 r2 ?

Je suis en train de "moderniser" une application asp classique qui utilise une base de données Access 2000.

J'ai réécrit la base de données sur SQL Server 2008r2 et modifié tous les champs pour utiliser les nouveaux nchar, nvarchar et ntext compatibles avec l'unicode et j'ai importé les anciennes données. Je suis également passé de IIS 6 à IIS 7.

L'asp classique consiste à collecter et à écrire des données en utilisant UTF-8.

Aujourd'hui, l'application affiche correctement les données OLD dans les pages web, mais dès que j'y touche (UPDATE ou INSERT), les données sont corrompues. Je suppose que je dois d'une manière ou d'une autre convertir les données UTF-8 de l'asp classique en UCS-2 avant d'écrire les données dans le serveur SQL.

Mais comment ?

NOTE : il semble que le serveur SQL ait converti automatiquement les données utf-8 dans un format utilisable lorsqu'il a importé les données à partir d'Access.

6voto

Chris Chadwick Points 197

Vous devez indiquer à SQL Server 2008 que vous envoyez des données unicode en ajoutant un N à l'avant de votre valeur d'insertion.

strTest = "Служба мгновенных сообщений"
strSQL = "INSERT INTO tblTest (test) VALUES (N'"&strTest&"')"

Le N indique au serveur SQL de traiter le contenu comme Unicode. et ne corrompt pas les données.

Véase http://support.microsoft.com/kb/239530 pour plus d'informations.

Voici le code de test exécuté sur ASP classique IIS 7 SQL Server 2008r2

CREATE TABLE [dbo].[tblTest](
    [test] [nvarchar](255) NULL,
    [id] [int] IDENTITY(1,1) NOT NULL

Page ASP

<%

Response.CodePage = 65001
Response.CharSet = "utf-8" 

strTest = Request("Test")

Set cnn = Server.CreateObject("ADODB.Connection")
strConnectionString = Application("DBConnStr")
cnn.Open strConnectionString

strSQL = "INSERT INTO tblTest (test) VALUES (N'"&strTest&"')"
Set rsData = cnn.Execute(strSQL)

%>
 <html xmlns="http://www.w3.org/1999/xhtml" charset="utf-8">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title></title>

</head 
<body>
    <form action="test.asp" method="post" name="form1" >
        <br/><br/><br/><center>
<table border="1">
    <tr><td><b>Test SQL Write</b> </td></tr>
    <tr><td><input type="text" name="Test" style="width: 142px" Value="<%=strtext%>" /></td></tr>
    <tr><td><input type="Submit" value="Submit" name "Submit" /></td></tr></table> </center>
</form>

</body>
</html>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X