Ответ 1
Как насчет определения вашей кодовой страницы в верхней части страницы?
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
Как я могу показать столбец nvarchar, который хранит данные Unicode (введенный с помощью шрифта zawgyi1) на классической веб-странице ASP?
Когда я извлекаю и записываю значение на страницу, он показывает "?????". Я установил тип содержимого страницы ASP UTF-8 со следующим метатегом:
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
К сожалению, текст по-прежнему отображается как "?????".
Любые предложения или идеи о том, как отображать значения unicode на классической странице ASP?
Как насчет определения вашей кодовой страницы в верхней части страницы?
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
Мета-заголовок Content-Type информирует обозреватель для обработки содержимого, отправленного в виде текстового потока с кодировкой UTF-8. Он не гарантирует, что отправленный поток является фактически UTF-8. Чтобы правильно обрабатывать UTF-8, вам нужно сделать 3 вещи: -
Пункт 1 требует либо того, чтобы вы фактически сохранили файл ASP как файл с кодировкой UTF-8, либо все содержимое статического содержимого в файле находилось в диапазоне символов ASCII (0-127). Обратите внимание, что если вы сохраняете как UTF-8, то все ваши серверные script должны использовать символы в диапазоне символов ASCII. В Visual Studio вы можете сделать это, "Сохраняя файл AS...", а затем нажав на маленькую стрелку на кнопке "Сохранить".
Пункт 2 требует, чтобы для свойства Response.CodePage
была задана кодовая страница UTF-8 65001, вы можете сделать это в коде или добавив атрибут CODEPAGE=65001
к объявлениям <%@ %>
в первой строке ASP файла. Если вы сделаете это в коде, вы должны установить его перед любыми вызовами Response.Write
.
И: не используйте функции chr или asc (они не работают при использовании 65001), но вместо этого используйте chrw и ascw.
Пункт 3 требует, чтобы заголовок Content-Type
содержал квалификатор charset=UTF-8
. Как вы уже делаете, вы можете сделать это с заголовком META. Лично я считаю, что, чтобы быть немного kludge, я предпочитаю использовать Response.Charset = "UTF-8"
в коде. Это помещает квалификатор в истинный Content-Type
HTTP-заголовок.
Здесь полезный script для пакетного преобразования ASP файлов из ANSI в кодировку 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 "• 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>