2009-10-27 50 views
37
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<!--#include file="conn.asp"--> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

Mã trên có đúng không?Mã số 65001 và utf-8 có giống nhau không?

Trả lời

41

Có.

UTF-8 là CP65001 trong Windows (đây chỉ là cách xác định UTF-8 trong công cụ mã thông báo cũ). Theo như tôi đọc ASP có thể xử lý UTF-8 khi quy định theo cách đó.

+1

Codepage "kế thừa" theo cách nào? – AnthonyWJones

+14

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

+0

@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

3

Có, 65001 là mã nhận diện trang mã Windows cho UTF-8, như được ghi thành tài liệu on the Microsoft website. Wikipedia suggests rằng mã trang IBM 128 và mã trang SAP 4110 cũng là các chỉ báo cho UTF-8.

9

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.

+0

Ý nghĩa và hiệu quả chính của '<% @ LANGUAGE =" VBSCRIPT "CODEPAGE =" 65001 "%>' là để mã hóa tệp nguồn thành UTF-8 (hoặc bất kỳ mã nào được chỉ định). Nó chỉ thác qua thuộc tính 'Response.CharSet'. Bạn có thể lưu tệp của mình dưới dạng UTF-8 và đặt bản kê khai CODEPAGE phù hợp trong và sau đó vẫn sử dụng một mã hóa khác cho 'Response.CharSet'. Giống như nguồn trong 65001 và đầu ra vào năm 1251 hoặc 1252. - Bạn có thể biết điều đó, tôi không nghĩ rằng nó hoàn toàn rõ ràng từ văn bản của bạn, bắt đầu bằng cách ngụ ý rằng chúng có thể là lựa chọn thay thế đơn giản. – Lumi

+1

@Lumi: Tôi không tìm thấy hàm ý như vậy, tôi trích dẫn "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 có ảnh hưởng đến nội dung có thể được mã hóa" như thế nào. Có vẻ khá rõ ràng với tôi. BTW hiệu ứng __actual__ duy nhất của chỉ thị CODEPAGE là đặt 'Response.CodePage', trách nhiệm của nhà phát triển để đảm bảo tệp được lưu bằng cách sử dụng trang mã phù hợp. – AnthonyWJones

+0

bạn nói đúng. Tôi đã nhầm lẫn 'Response.CharSet' và' Response.CodePage'. Thiết lập thác CODEPAGE chỉ thị cho sau này, không phải để trước; nó hoàn toàn không có bất kỳ đầu đề 'Content-Type' nào. Tôi tin rằng chỉ thị CODEPAGE được hiểu rõ nhất là "mã hóa tệp nguồn". [Đây là một ví dụ về nơi nó quan trọng.] (Http://code.activestate.com/lists/activeperl/21512/) Biểu thức quan trọng là 'domXml.createElement (" Französisch ")'. Tệp được mã hóa bằng UTF-8 (phải là Unicode cho tất cả tiếng Hy Lạp, tiếng Nga, v.v.) và vì vậy 'codepage = 65001' là rất quan trọng. – Lumi

1
response.codepage = 65001 

dường như cho kết quả xấu khi tập tin vật lý được lưu lại dưới dạng utf-8

Nếu không, nó hoạt động như nó là vụ phải.

+0

làm thế nào bạn có thể sửa lỗi này với utf8? – toxicate20

Các vấn đề liên quan