2009-12-06 4 views
13

Wie kann ich eine nvarchar-Spalte anzeigen, die Unicode-Daten (mit der Schriftart zawgyi1) in einer klassischen ASP-Webseite speichert?Classic ASP: Wie schreibe ich Unicode-String-Daten in klassischen ASP?

Wenn ich den Wert abrufen und auf die Seite schreiben, wird "?????" angezeigt. Ich habe meine ASP-Seite Inhaltstyp von UTF-8 mit dem folgenden Meta-Tag:

<META http-equiv="Content-Type" content="text/html; charset=UTF-8"> 

Leider ist der Text immer noch als „?????“ wiedergegeben wird.

Alle Vorschläge oder Ideen zum Anzeigen von Unicode-Werten in einer klassischen ASP-Seite?

Antwort

15

Wie steht es mit Ihrer Codepage-Definition oben auf Ihrer Seite?

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
+0

Vielen Dank! Für mich geht das. Ich füge nur dieses Skript auf meiner Seite hinzu. Danke vielmals! Ich kann nicht sofort antworten, weil ich an diesen Tagen nicht online sein kann. Vielen Dank. – RedsDevils

+0

Ist es nicht lustig, wenn Sie eine Antwort auf eine Frage erhalten, die Sie vor 5 Jahren beantwortet haben? – BenCr

15

Der Meta-Header Content-Type informiert den Browser darüber, dass der Inhalt als UTF-8-codierter Textstream behandelt wird. Es stellt nicht sicher, dass der gesendete Stream tatsächlich UTF-8 ist. Um UTF-8 richtig zu handhaben, müssen Sie drei Dinge tun: -

  1. Stellen Sie sicher, dass Ihr statischer Inhalt in einer UTF-8-kompatiblen Codierung gespeichert wird.
  2. Stellen Sie sicher, dass Ihr dynamischer Inhalt in UTF-8 codiert ist.
  3. Informieren Sie den Client, dass der Inhalt UTF-8-codiert ist.

Artikel 1 erfordert entweder, dass Sie tatsächlich die ASP-Datei als UTF-8 kodierten Datei oder dass alle Ihre statischen Inhalte in der innerhalb des ASCII-Zeichenbereiches (0-127) Datei speichern. Hinweis: Wenn Sie als UTF-8 speichern, müssen alle serverseitigen Skripts Zeichen innerhalb des ASCII-Zeichenbereichs verwenden. In Visual Studio können Sie dies tun, indem Sie "Datei speichern unter ..." und dann auf den kleinen Pfeil auf der Schaltfläche Speichern klicken.

Artikel 2 erfordert, dass die Response.CodePage Eigenschaft auf die Seite UTF-8-Code festgelegt ist 65001, können Sie dies im Code tun oder durch das Attribut CODEPAGE=65001 in der ersten Zeile der ASP-Datei auf die <%@ %> Erklärungen hinzufügen. Wenn Sie es in Code tun, müssen Sie es vor allen Aufrufen an Response.Write festlegen. UND: Verwenden Sie nicht CHR oder ASC-Funktionen (diese sind fehlerhaft, wenn Sie 65001 verwenden), sondern stattdessen CHRW und Ascw.

Artikel 3 erfordert, dass der Header Content-Type den Qualifier charset=UTF-8 enthält. Wie Sie es bereits tun, können Sie dies mit dem META-Header tun. Persönlich finde ich, dass um ein bisschen Kludge zu sein, ich bevorzuge Response.Charset = "UTF-8" in Code zu verwenden. Dies platziert das Qualifikationsmerkmal auf den wahren HTTP-Header Content-Type.

+0

Danke AnthonyWJones dein Item2 arbeite mit meinem Problem. Vielen Dank! – RedsDevils

+0

Auf unserer Website, obwohl wir das Meta-Element im HTML-Code hinzugefügt hatten, musste ich noch Response.Charset hinzufügen, danke Anythony. – svandragt

1

Hier ist ein nützliches Skript Batch-convert ASP-Dateien von ANSI in UTF-8-Kodierung:

<HTML> 
<HEAD> 
<TITLE>ASP UTF-8 Converter - TFI 13/02/2015</TITLE> 
</HEAD> 
<BODY style='font-face:arial;font-size:11px'> 
<% 
Dim fso, folder, files, NewsFile, sFolder, objFSO, strFileIn, strFileOut 
Set fso = CreateObject("Scripting.FileSystemObject") 
sFolder = "C:\inetpub\wwwroot\sitefolder" 

Function ANSItoUTF8(ANSIFile) 
    UFT8FileOut=ANSIFile&".utf8" 
    Set oFS = CreateObject("Scripting.FileSystemObject") 
    Set oFrom = CreateObject("ADODB.Stream") 
    sFFSpec = oFS.GetAbsolutePathName(ANSIFile) 
    Set oTo = CreateObject("ADODB.Stream") 
    sTFSpec = oFS.GetAbsolutePathName(UFT8FileOut) 
    oFrom.Type = 2 'adTypeText 
    oFrom.Charset = "Windows-1252" 
    oFrom.Open 
    oFrom.LoadFromFile sFFSpec 
    oTo.Type = 2 'adTypeText 
    oTo.Charset = "utf-8" 
    oTo.Open 
    oTo.WriteText oFrom.ReadText 
    oTo.SaveToFile sTFSpec,2 
    oFrom.Close 
    oTo.Close 
    oFS.DeleteFile sFFSpec 
    oFS.MoveFile sTFSpec,sFFSpec 
End Function 

ConvertFiles fso.GetFolder(sFolder), True 

Function ConvertFiles(objFolder, bRecursive) 
    Dim objFile, objSubFolder 
    For each objFile in objFolder.Files 
     If Ucase(fso.GetExtensionName(objFile)) = "ASP" Then 
      ANSItoUTF8 objFile.path 
      response.write "&bull; Converted <B>"&fso.GetAbsolutePathName(objFile)&"</B> from ANSI to UTF-8<BR>" 
     End If 
    Next 

    If bRecursive = true then 
     For each objSubFolder in objFolder.Subfolders 
      ConvertFiles objSubFolder, true 
     Next 
    End If 
End Function 

%> 
</BODY> 
</HTML>