Hiểu cách IIS xử lý mã hóa ASP
Như với tất cả các vấn đề mã hóa trong Classic ASP, nó giúp hiểu được mục đích mà các lệnh khác nhau thực hiện (vì quá thường xuyên mọi người sử dụng chúng không chính xác, vì nó dường như để giải quyết vấn đề) .
<%@ Language = "VBScript" CodePage = 65001 %>
Dòng này thường bị hiểu nhầm, cú pháp <%@
là một "ASP @ Chỉ thị xử lý" và phục vụ cho IIS biết cách xử lý trang ASP và có lẽ là một trong những lệnh quan trọng nhất khi nói đến việc làm việc với mã hóa một cách chính xác.
-
@Language
cho IIS biết Ngôn ngữ kịch bản hoạt động đã đăng ký nào nên được sử dụng để xử lý Trang ASP. -
@CodePage
cho IIS biết CodePage nào nên được sử dụng để xử lý Trang ASP. Nếu trang đã được lưu bằngUTF-8
thì IIS cần biết khi xử lý trang nó nên sử dụng CodePage65001
(còn được gọi làUTF-8
) .
Điều này có nghĩa là @CodePage
phải luôn khớp với mã hóa vật lý đã được sử dụng khi tạo trang. Bạn có thể cần sử dụng trình soạn thảo văn bản nâng cao để giải quyết vấn đề này, một số ví dụ là Notepad ++
(hiển thị mã hóa trên thanh trạng thái ở dưới cùng bên phải của cửa sổ GUI) và Visual Studio
(Có một lệnh menu ẩn được gọi là Advanced Save Options
có thể được truy cập bằng cách tùy chỉnh thanh menu) .
<% Response.CodePage = 65001 %>
Một lần nữa thường bị hiểu nhầm, mục đích của lệnh này là để cho IIS biết cách mã hóa chuỗi động (bởi chuỗi động, chúng tôi có nghĩa là bất kỳ thứ gì được xuất ra bằng cách sử dụng Response.Write()
) . Có thể là phần quan trọng nhất của toàn bộ quy trình, nếu nó được đặt không chính xác hoặc mã hóa giả định không khớp có thể xảy ra.
<% Response.CharSet = "UTF-8" %>
Lệnh này đặt ;charset=utf-8
trong Content-Type
Tiêu đề HTTP khi phản hồi được gửi từ Máy chủ đến Trình duyệt Máy khách, nó sẽ thông báo cho Trình duyệt biết rằng phản hồi này phải được xử lý dưới dạng UTF-8
thay vào đó là mã mặc định. mã nghĩa như
Response.AddHeader "Content-Type", "text/html; charset=utf-8"
là thừa và không nên sử dụng. Cũng cần lưu ý rằng có một lệnh cho Content-Type
Cả tiêu đề HTTP
Response.ContentType = "text/html"
làm cho nó thậm chí còn dư thừa hơn so với nó đã có.