Mã của bạn là đúng mặc dù tôi thích để thiết lập charset trong mã thay vì sử dụng thẻ meta: -
<% Response.CharSet = "UTF-8" %>
Các bảng mã 65001 không đề cập đến các bộ ký tự UTF-8. Bạn sẽ cần phải chắc chắn rằng trang asp của bạn (và bất kỳ bao gồm) được lưu dưới dạng UTF-8 nếu chúng chứa bất kỳ ký tự nào bên ngoài bộ ký tự ASCII chuẩn.
Bằng cách chỉ định thuộc tính CODEPAGE trong khối <% @, bạn cho biết rằng mọi thứ được viết bằng Response.Write phải được mã hóa thành Codepage được chỉ định, trong trường hợp này là 65001 (utf-8). Giá trị của nó mang trong tâm trí rằng điều này không ảnh hưởng đến bất kỳ nội dung tĩnh được gửi byte nguyên bản cho byte để phản ứng. Do đó lý do tại sao tệp cần được lưu thực sự bằng cách sử dụng trang mã được chỉ định.
Thuộc tính CharSet của phản hồi đặt giá trị CharSet của tiêu đề Loại nội dung. Điều này không ảnh hưởng đến cách nội dung của tôi được mã hóa nó chỉ cho khách hàng biết mã hóa nào đang được nhận. Một lần nữa điều quan trọng là giá trị của nó khớp với mã hóa thực tế được gửi.
Codepage "kế thừa" theo cách nào? – AnthonyWJones
Các văn bản trong quá khứ có một trang * mã mà chỉ định rõ ký tự nào được đặt để sử dụng. Những người đã có một số số khác nhau từ nhà cung cấp cho nhà cung cấp, Windows dường như sử dụng một số nguyên không dấu 16 bit cho mục đích đó. Ngày nay, hầu hết các bộ mã hóa và ký tự đều có * tên * thay vì * số *. Tôi xem xét thực tế là UTF-8 có một số trang mã (không được chỉ định và cũng không được sử dụng bên ngoài Microsoft) một điều để đảm bảo rằng nó vẫn làm việc với hệ thống số trang mã 16 bit cũ. Mặc dù UTF-8 không có gì giống như một trang mã ở nơi đầu tiên. – Joey
@Johannes: Số mã số vẫn là một tính năng quan trọng của cách Windows xử lý mã hóa ký tự. Ví dụ trong .NET lớp Encoding chỉ có thể được instanced bằng cách sử dụng số mã. Tôi không nghĩ rằng Codepage là "di sản". – AnthonyWJones