2009-12-06 45 views
13

Làm cách nào để hiển thị cột nvarchar lưu trữ dữ liệu unicode (Được nhập bằng phông chữ zawgyi1) trong trang web ASP cổ điển?ASP cổ điển: Cách viết dữ liệu chuỗi unicode trong ASP cổ điển?

Khi tôi truy xuất và ghi giá trị vào trang, nó hiển thị "?????". Tôi đặt loại nội dung trang ASP của tôi là UTF-8 với thẻ meta sau:

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

Thật không may, văn bản vẫn được hiển thị là "?????".

Bất kỳ đề xuất hoặc ý tưởng nào về cách hiển thị giá trị unicode trong trang ASP cổ điển?

Trả lời

15

Điều gì về định nghĩa bảng mã của bạn ở đầu trang của bạn?

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

Cảm ơn rất nhiều! Nó làm việc cho tôi. Tôi chỉ cần thêm tập lệnh đó vào trang của tôi. Cảm ơn rất nhiều! Tôi không thể trả lời ngay lập tức 'Tôi không thể trực tuyến vào những ngày đó. Cảm ơn. – RedsDevils

+0

Không phải là nó thú vị khi bạn nhận được một phiếu bầu lên một câu hỏi mà bạn đã trả lời cách đây 5 năm. – BenCr

15

Tiêu đề meta loại nội dung thông báo cho trình duyệt xử lý nội dung được gửi dưới dạng luồng văn bản được mã hóa UTF-8. Nó không đảm bảo rằng luồng được gửi thực sự là UTF-8. Để xử lý UTF-8 đúng, bạn cần phải làm 3 việc: -

  1. Đảm bảo nội dung tĩnh của bạn được lưu trong mã hóa tương thích UTF-8.
  2. Đảm bảo nội dung động của bạn được mã hóa thành UTF-8.
  3. Thông báo cho khách hàng rằng nội dung được mã hóa UTF-8.

khoản 1 đòi hỏi một trong hai mà bạn thực sự lưu file ASP như một UTF-8 mã hóa tập tin hay rằng tất cả các nội dung tĩnh của bạn trong file nằm trong phạm vi ký tự ASCII (0-127). Lưu ý nếu bạn lưu dưới dạng UTF-8 thì tất cả tập lệnh phía máy chủ của bạn phải sử dụng các ký tự trong phạm vi ký tự ASCII. Trong Visual Studio, bạn có thể làm như vậy bằng cách "Lưu tệp AS ..." và sau đó nhấp vào mũi tên nhỏ trên nút Lưu.

khoản 2 đòi hỏi tài sản Response.CodePage được thiết lập để UTF-8 mã trang 65001, bạn có thể làm điều này trong mã hoặc bằng cách thêm thuộc tính CODEPAGE=65001 đến <%@ %> tờ khai trên dòng đầu tiên của file ASP. Nếu bạn làm điều đó trong mã, bạn phải đặt nó trước khi bất kỳ cuộc gọi đến Response.Write. VÀ: không sử dụng chr hoặc asc chức năng (đây là lỗi khi sử dụng 65001) nhưng sử dụng chrw và ascw thay thế.

Mục 3 yêu cầu tiêu đề Content-Type chứa tiêu chuẩn charset=UTF-8. Như bạn đã làm, bạn có thể làm điều này với tiêu đề META. Cá nhân tôi thấy rằng có một chút kludge, tôi thích sử dụng Response.Charset = "UTF-8" trong mã. Việc này đặt vòng loại vào tiêu đề HTTP thực sự Content-Type.

+0

Thanks AnthonyWJones Item2 của bạn làm việc với vấn đề của tôi. Cảm ơn! – RedsDevils

+0

Trên trang web của chúng tôi mặc dù chúng tôi đã thêm phần tử meta vào html, tôi vẫn phải thêm Response.Charset, cảm ơn Anythony. – svandragt

1

Dưới đây là một kịch bản rất hữu ích để batch-convert ASP tập tin từ ANSI sang UTF-8 encoding:

<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> 
Các vấn đề liên quan