Vậy vấn đề là gì
Đó là một ký tự ’
( RIGHT SINGLE QUOTATION MARK
- U + 2019) đang được giải mã là CP-1252 thay vì UTF-8 . Nếu bạn kiểm tra mã hóa bảng, sau đó bạn thấy rằng nhân vật này là dưới dạng UTF-8 gồm byte 0xE2
, 0x80
và 0x99
. Nếu bạn đánh dấu vào CP-1252 bố trí trang mã , sau đó bạn sẽ thấy rằng mỗi người trong số những byte đại diện cho những nhân vật cá nhân â
, €
và ™
.
và làm thế nào tôi có thể sửa chữa nó?
Sử dụng UTF-8 thay vì CP-1252 để đọc, viết, lưu trữ và hiển thị các ký tự.
Tôi có Loại Nội dung được đặt thành UTF-8 trong cả <head>
thẻ và tiêu đề HTTP của tôi:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Điều này chỉ hướng dẫn khách hàng sử dụng mã hóa để giải thích và hiển thị các ký tự. Điều này không hướng dẫn chương trình của bạn sử dụng mã hóa để đọc, viết, lưu trữ và hiển thị các ký tự. Câu trả lời chính xác phụ thuộc vào nền tảng / cơ sở dữ liệu / ngôn ngữ lập trình phía máy chủ được sử dụng. Xin lưu ý rằng một bộ trong tiêu đề phản hồi HTTP được ưu tiên hơn thẻ meta HTML. Thẻ meta HTML sẽ chỉ được sử dụng khi trang được mở từ hệ thống tệp đĩa cục bộ thay vì từ HTTP.
Ngoài ra, trình duyệt của tôi được đặt thành Unicode (UTF-8)
:
Điều này chỉ buộc khách hàng sử dụng mã hóa để giải thích và hiển thị các ký tự. Nhưng vấn đề thực tế là bạn đã gửi ’
(được mã hóa bằng UTF-8) cho khách hàng thay vì ’
. Máy khách được hiển thị chính xác ’
bằng mã hóa UTF-8. Nếu ứng dụng khách bị cấu trúc sai để sử dụng, ví dụ ISO-8859-1, bạn có thể đã thấy ââ¬â¢
thay thế.
Tôi đang sử dụng ASP.NET 2.0 với cơ sở dữ liệu.
Đây rất có thể là vấn đề của bạn nằm. Bạn cần xác minh với một công cụ cơ sở dữ liệu độc lập xem dữ liệu trông như thế nào.
Nếu ’
ký tự ở đó, thì bạn không kết nối đúng với cơ sở dữ liệu. Bạn cần nói với trình kết nối cơ sở dữ liệu để sử dụng UTF-8.
Nếu cơ sở dữ liệu của bạn chứa ’
, thì đó là cơ sở dữ liệu của bạn đã bị rối. Hầu hết các bảng không được cấu hình để sử dụng UTF-8
. Thay vào đó, họ sử dụng mã hóa mặc định của cơ sở dữ liệu, thay đổi tùy theo cấu hình. Nếu đây là vấn đề của bạn, thì thường chỉ cần thay đổi bảng để sử dụng UTF-8 là đủ. Nếu cơ sở dữ liệu của bạn không hỗ trợ điều đó, bạn sẽ cần tạo lại các bảng. Đó là một thực hành tốt để thiết lập mã hóa của bảng khi bạn tạo nó.
Bạn rất có thể đang sử dụng SQL Server, nhưng đây là một số mã MySQL (được sao chép từ bài viết này ):
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
Tuy nhiên, nếu bảng của bạn đã là UTF-8, thì bạn cần lùi lại một bước. Ai hoặc cái gì đặt dữ liệu ở đó. Đó là vấn đề. Một ví dụ sẽ là các giá trị được gửi dưới dạng HTML được mã hóa / giải mã không chính xác.
Dưới đây là một số liên kết để tìm hiểu thêm về vấn đề: