2016-08-16 1 views
1

Wenn es einen Eingang oder Ausgang auf einer ASP-Seite ist this sort of thing funktioniert wie ein Zauber:ASP classic: Was bestimmt die Zeichencodierung für ADODB?

<%@ LANGUAGE="VBScript" CodePage = 65001 %> 
<% 
    Response.CharSet = "UTF-8" 
    Response.CodePage = 65001 
%> 

Aber wenn es eine ASP-Seite ausgeführt wird reines VBS und gebe ich eine nicht-lateinische Zeichenkette als Parameter an einer MS SQL-Sproc über Server.CreateObject("ADODB.Command") dann ist es in eine Reihe von ? Zeichen irgendwo zwischen, wenn der Befehl ausgeführt wird und MS SQL setzt es in eine Varchar-Spalte.

Allerdings habe ich eine Instanz von IIS, auf der die gleichen ASP-Seiten solche Zeichenfolgen in die Datenbank mit UTF-8-Codierung einfügen. Da ich die IIS-Einstellung nicht finden kann, die das funktioniert, wie kann ich einen ADODB.Command Parameter-Wert in UTF-8 konvertiert werden?

+0

Wenn Sie UTF-8-codierte Zeichen an SQL Server übergeben, sollten sie in einer 'NVARCHAR'-Spalte und nicht in einem' VARCHAR' platziert werden, was die nicht übereinstimmende Kodierung erklärt. Parameterweise sollten Sie den Datentyp 'adVarWChar' bzw.' adLongVarWChar' verwenden. – Lankymart

+0

@Lankymart - Ich werde jetzt mit diesem ADO-Datentyp-Flag testen. Ich weiß, dass die DB-Spalte * sollte * ein NVARCHAR sein, aber es ist ein Altsystem. Jeder Einblick in [wie die gleiche Datenbank und derselbe Code UTF-8-codierte Strings empfangen haben könnten, wenn der ASP von einem anderen IIS-Server ausgeführt wird] (http://serverfault.com/q/796971/350508)? – feetwet

+0

Interessante Frage, ist der gleiche Anbieter auf beiden Servern verwendet? Es hängt auch vollständig davon ab, was die Seite tut, d. H. Daten aus einem Formular zu veröffentlichen. – Lankymart

Antwort

1

ASP-Zeichencodierung kann eine unbeständige Sache sein. In einer Codebasis von 169 ASP-Dateien wurde eine mit UTF-8-BOM-Codierung gespeichert. Es wurde auf einer Maschine eingesetzt, aber nicht auf der anderen. Alles, was es enthielt, waren einige VBS FUNCTION Definitionen. Aber jeder ASP, der diese Datei mit der BOM-Codierung enthielt, wurde sofort unfähig gemacht, einen ADODB.Command-Parameter in UTF-8 anzuhängen. Stattdessen entschied es sich anscheinend –, aber nur für ADODB.Command Zwecke, nicht für, sagen wir, JSON PUT über MSXML2.ServerXMLHTTP Objekte –, dass alles, was nicht ASCII war ?.

Das ist es: Speichern Sie eine Codedatei als UTF-8-BOM und ASP bricht. Speichern Sie es als UTF-8, es funktioniert wieder.

Wie können Sie feststellen, dass eine Ihrer 169 ASP-Dateien, die auf ein paar Dutzend Verzeichnisse verteilt sind, mit der "falschen" Codierung gespeichert wird? Ich weiß es nicht. Ich hatte Glück, wusste zufällig, wo die letzten Arbeiten gemacht wurden und überprüfte zufällig die Kodierung der Datei in Notepad ++.

Ist es nur zwei verschiedene Codierungen, die klassische ASP verwirrt? Ich weiß es nicht, aber here's at least one other answer that suggests that BOM encoding causes problems.

+0

Ja, das werde ich machen, guter Fang. – Lankymart