2009-12-06 72 views
13

Come è possibile visualizzare una colonna nvarchar che memorizza i dati Unicode (immesso con il font zawgyi1) in una pagina Web ASP classica?ASP classico: come scrivere dati stringa unicode in ASP classico?

Quando richiamo e scrivo il valore nella pagina, viene visualizzato "?????". Ho impostato il tipo di contenuto della mia pagina di ASP di UTF-8 con il seguente meta tag:

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

Purtroppo, il testo è ancora reso come "?????".

Eventuali suggerimenti o idee su come visualizzare i valori unicode in una pagina ASP classica?

risposta

15

E la definizione della tabella codici nella parte superiore della pagina?

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

Grazie mille! Per me funziona. Ho appena aggiunto quel copione alla mia pagina. Molte grazie! Non posso rispondere immediatamente 'coz Non posso essere online in quei giorni. Grazie. – RedsDevils

+0

Non è divertente quando ottieni un voto alto su una domanda che hai risposto 5 anni fa. – BenCr

15

Il Content-Type meta intestazione informa il browser di trattare il contenuto inviato in un flusso di testo codificato UTF-8. Non garantisce che lo stream inviato sia effettivamente UTF-8. Per gestire correttamente UTF-8 devi fare 3 cose: -

  1. Assicurarsi che il contenuto statico sia salvato in una codifica compatibile con UTF-8.
  2. Assicurarsi che il contenuto dinamico sia codificato in UTF-8.
  3. Informare il client che il contenuto è codificato in UTF-8.

Articolo 1 lavoro richiede la che in realtà di salvare il file ASP come un file codificato UTF-8 o che tutti i tuoi contenuti statici nel file è all'interno della gamma di caratteri ASCII (0-127). Nota se si salva come UTF-8 allora tutti gli script lato server devono usare caratteri nell'intervallo di caratteri ASCII. In Visual Studio puoi farlo selezionando "Salvataggio del file AS ..." e quindi facendo clic sulla piccola freccia sul pulsante Salva.

Articolo 2 richiede che la proprietà Response.CodePage è impostato sul codice della pagina 65.001 UTF-8, è possibile farlo in codice o aggiungendo l'attributo CODEPAGE=65001 alle <%@ %> dichiarazioni sulla prima riga del file ASP. Se lo si fa in codice, è necessario impostarlo prima di ogni chiamata a Response.Write. AND: non utilizzare le funzioni chr o asc (queste sono buggy quando si usa 65001), ma usare invece chrw e ascw.

L'articolo 3 richiede che l'intestazione Content-Type contenga il qualificatore charset=UTF-8. Come già stai facendo, puoi farlo con l'intestazione META. Personalmente trovo che per essere un po 'di kludge, preferisco usare Response.Charset = "UTF-8" nel codice. Questo pone il qualificatore sulla vera intestazione HTTP Content-Type.

+0

Grazie a AnthonyWJones, il tuo Item2 funziona con il mio problema. Grazie! – RedsDevils

+0

Sul nostro sito nonostante avessimo aggiunto il meta elemento nell'html dovevo aggiungere Response.Charset, grazie a Anythony. – svandragt

1

Ecco uno script utile per i file ASP in batch-convertire da ANSI a codifica UTF-8:

<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>