2012-04-21 49 views

Trả lời

7

Nếu tệp javascript của bạn được mã hóa bằng mã hóa khác với trang đang sử dụng, bạn có thể sử dụng thuộc tính charset để cho trình duyệt biết cách diễn giải nó. Ví dụ: nếu trang đang sử dụng Latin1, nhưng tệp JS đã được tạo bằng UTF-8.

+1

Mặc dù có vẻ như với tôi rằng tốt hơn nên đặt mã hóa trong tiêu đề của phản hồi trả về tập lệnh. – GolezTrol

+1

@GolezTrol - Nó _would_ tốt hơn, nhưng không phải tất cả các tác giả web đều có quyền kiểm soát đối với các tiêu đề. – Oded

+1

Nếu trang đang sử dụng một số mã hóa khác (trong trường hợp của tôi, euc-kr) và JS đang sử dụng UTF8, một số văn bản được viết bằng cách gọi document.write() hoặc thiết lập innerHTML của một số phần tử sẽ được mã hóa chính xác trong mã hóa (euc -kr) không phải UTF8? –

3

Mỗi tệp JavaScript là một phần tử riêng biệt từ trang, sau khi tất cả bạn thậm chí có thể tải JS từ một số máy chủ của tác giả từ xa mà không có mối quan hệ nào với trang của bạn cả. Cũng giống như với bất kỳ phần tử bên ngoài nào khác, bạn có thể chỉ định "bộ ký tự" theo cách thủ công nếu máy chủ từ xa trả về bộ ký tự sai vì một số lý do hoặc chỉ để chắc chắn.

Ngoài ra, nếu bạn có quyền truy cập ghi vào tệp JS này, bạn có thể thay thế tất cả không phải ASCII bằng cách thoát vị trí Unicode - điều này sẽ đảm bảo rằng các ký hiệu sẽ luôn được diễn giải chính xác, bất kể mã hóa được chỉ định trong tiêu đề . Một số trình chỉnh sửa JS, như Google Closure Compiler, có thể tự động làm điều đó cho bạn.

+0

Vì vậy, ưu tiên nào? 'tập lệnh ký tự 'hoặc bộ ký tự tiêu đề của tệp js được bao gồm? – Pacerier

5

Mục đích của tham số charset là chỉ định mã hóa của tập lệnh bên ngoài trong trường hợp mã hóa không được chỉ định ở cấp giao thức HTTP. Đó là không có nghĩa là ghi đè thông tin mã hóa trong tiêu đề HTTP và không thực hiện điều đó.

Điều này rất hữu ích khi tác giả không thể kiểm soát tiêu đề HTTP và tiêu đề không chỉ định mã hóa ký tự. Nó cũng hữu ích cho các tệp ngoại tuyến, chẳng hạn như trong bản sao cục bộ của trang web được truy cập trực tiếp, không phải qua máy chủ HTTP, do đó không có tiêu đề HTTP nào tồn tại.

Trong thực tế, nó không phải là rất hữu ích. Nếu bạn cần sử dụng các ký tự không phải Ascii trong tệp JavaScript, bạn có thể sử dụng mã hóa UTF-8. Nếu bạn sử dụng UTF-8 với một BOM hàng đầu, BOM hoạt động như một chỉ báo hữu ích cho phép các trình duyệt suy ra việc mã hóa. Nhưng nó không làm tổn thương để sử dụng thêm charset=utf-8.

+0

Bạn có chắc chắn rằng bộ ký tự được chỉ định trong tiêu đề của tệp JS được bao gồm có ưu tiên hơn bộ ký tự rõ ràng được chỉ định trong trang html chính không?Yêu cầu này có được thử nghiệm trên các trình duyệt thực ** trong tự nhiên ** không? – Pacerier

+1

Có, được thử nghiệm trong Firefox, Chrome, IE (Win 7). Trang kiểm tra: http://www.cs.tut.fi/~jkorpela/test/js/demo.html –

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