2015-07-20 17 views
5

Tôi đang thay đổi ứng dụng của mình để hoạt động với các trang utf-8. Vì vậy, mỗi trang ASP có mã nàyASP cổ điển và UTF-8

Response.CodePage = 65001 
Response.CharSet = "utf-8" 

Và HTML

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

tôi đã lưu tất cả các tài liệu trong Visual Studio 2013 với mã hóa UTF-8 (mà không chữ ký) 65001.

này đang hoạt động tốt khi tôi viết các ký tự đặc biệt bằng HTML như sau:

<p>Atenção</p> 

Nhưng khi tôi viết trong VBScript (ASP cổ điển) nó không hoạt động và các ký tự đặc biệt là lộn xộn. Tôi có thể sửa chúng bằng cách lưu tài liệu (asp) với mã hóa UTF-8 (với chữ ký) 65001.

Vì vậy, câu hỏi của tôi là:

  • Tôi có phải sử dụng mã hóa này (với chữ ký) trên mỗi trang?
  • Tôi có thể gặp phải vấn đề gì với nó?
+0

Tôi khuyên bạn nên đọc phần này - http://www.hanselman.com/blog/InternationalizationAndClassicASP.aspx VS xuất hiện để gọi thứ tự byte đánh dấu chữ ký. – John

+0

Vì vậy, các trang ASP của tôi phải có BOM. – Onaiggac

+1

Nó không nên gây hại gì cho cả BOM. Điều đó nói rằng, tôi thường lưu các trang như UTF8 mà không có BOM và tôi đã không có khó khăn. (Tôi có xu hướng không sử dụng VS cho ASP cổ điển mặc dù, tôi sử dụng một trình soạn thảo được gọi là EditPlus, mà là tương tự như Notepad2 như đã đề cập bởi Hanselman) – John

Trả lời

3

Bạn cần đặt chỉ thị @Codepage cho mỗi tệp .asp. Chúng tôi đang sử dụng một #include tập chung được bao gồm đầu tiên trên mỗi trang và có những dòng sau lên phía trước:

<%@Codepage = 65001 %> 
<% Option explicit %> 
<% Response.Codepage = 65001 %> 

Xem thêm thông tin về các chỉ thị bảng mã (phần chú thích) here. Trang được liên kết là khoảng Session.Codepage cũng có thể khiến bạn thú vị nếu bạn muốn sử dụng Phiên được tích hợp sẵn.

Lưu tất cả các tệp bằng BOM không phải là yêu cầu đối với IIS, chúng tôi có tất cả các tệp được lưu mà BOM không hoạt động đúng cách. Một lưu ý từ kinh nghiệm của tôi, sau khi làm việc với ASP trong nhiều năm: đôi khi chúng tôi gặp vấn đề với các tệp nguồn của các tệp nguồn lẻn vào đầu ra được tạo ra, dẫn đến các vấn đề trong phản hồi AJAX/JSON. Biện pháp khắc phục là sử dụng Response.Clear trước khi viết đầu ra.

0

Tôi gặp sự cố ký tự lạ, đã thử tất cả các cài đặt mã hóa được đề xuất và không có gì hoạt động, mặc dù ở trên đã lấy dữ liệu vào cơ sở dữ liệu sql một cách chính xác, nó sẽ không hiển thị chính xác (vẫn là sự cố mã hóa/giải mã) .

Độ phân giải của tôi là xóa "CharSet=utf8;" khỏi chuỗi kết nối cơ sở dữ liệu.

Vì vậy, thay vì chuỗi kết nối của tôi:

sConnection = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;CharSet=utf8;Port:3306;DATABASE=dbname;UID=uid;PASSWORD=*****;OPTION=3" 

tôi đã sử dụng:

sConnection = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;Port:3306;DATABASE=dbname;UID=uid;PASSWORD=*****;OPTION=3" 

Mọi thứ đang hiển thị một cách chính xác!

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