Так в чем проблема,
Это символ ’
( RIGHT SINGLE QUOTATION MARK
- U + 2019), который декодируется как CP-1252 вместо UTF-8 . Если вы проверите таблицу кодировок , то увидите, что этот символ находится в UTF-8, состоящем из байтов 0xE2
, 0x80
и 0x99
. Если вы проверите макет кодовой страницы CP-1252 , то вы увидите, что каждый из этих байтов соответствует отдельным символам â
, €
а ™
.
и как это исправить?
Используйте UTF-8 вместо CP-1252 для чтения, записи, хранения и отображения символов.
У меня Content-Type установлен на UTF-8 как в моем <head>
теге, так и в моих заголовках HTTP:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Это только указывает клиенту, какую кодировку использовать для интерпретации и отображения символов. Это не указывает вашей собственной программе, какую кодировку использовать для чтения, записи, хранения и отображения символов. Точный ответ зависит от используемой серверной платформы / базы данных / языка программирования. Обратите внимание, что тот, который установлен в заголовке ответа HTTP, имеет приоритет над метатегом HTML. Метатег HTML будет использоваться только тогда, когда страница открывается из файловой системы локального диска, а не из HTTP.
Кроме того, мой браузер настроен на Unicode (UTF-8)
:
Это только заставляет клиента, какую кодировку использовать для интерпретации и отображения символов. Но реальная проблема в том, что вы уже отправляете ’
клиенту (в кодировке UTF-8) вместо ’
. Клиент правильно отображает ’
кодировку UTF-8. Если бы клиенту было неправильно сказано использовать, например, ISO-8859-1, вы, вероятно, увидели бы ââ¬â¢
вместо этого.
Я использую ASP.NET 2.0 с базой данных.
Скорее всего, в этом и заключается ваша проблема. Вам необходимо проверить с помощью независимого инструмента базы данных, как выглядят данные.
Если ’
персонаж присутствует, значит, вы неправильно подключаетесь к базе данных. Вам необходимо указать соединителю базы данных использовать UTF-8.
Если ваша база данных содержит ’
, то это ваша база данных испорчена. Скорее всего, таблицы не настроены для использования UTF-8
. Вместо этого они используют кодировку базы данных по умолчанию, которая зависит от конфигурации. Если это ваша проблема, то обычно достаточно просто изменить таблицу для использования UTF-8. Если ваша база данных не поддерживает это, вам необходимо воссоздать таблицы. Рекомендуется устанавливать кодировку таблицы при ее создании.
Скорее всего, вы используете SQL Server, но вот код MySQL (скопирован из этой статьи ):
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
Однако, если ваша таблица уже имеет UTF-8, вам нужно сделать шаг назад. Кто или что поместил туда данные. Вот где проблема. Одним из примеров могут быть значения, отправленные в HTML-форме, которые неправильно закодированы / декодированы.
Вот еще несколько ссылок, чтобы узнать больше о проблеме: