Вопрос

’ отображается на моей странице вместо '.

у меня есть Content-Type установлен в UTF-8 в обоих моих <head> тег и мои HTTP-заголовки:

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

enter image description here

Кроме того, мой браузер настроен на Unicode (UTF-8):

enter image description here

Так в чем же проблема и как ее исправить?

Это было полезно?

Решение

Убедитесь, что браузер и редактор используют кодирование UTF-8 вместо ISO-8859-1/Windows-1252.

Или использовать &rsquo;.

Другие советы

Так в чем проблема,

Это (RIGHT SINGLE QUOTATION MARK - U+2019) характер, который был закодирован как CP-1252 вместо UTF-8. Анкет Если вы проверете кодировки Таблица, затем вы видите, что этот символ в UTF-8 состоит из байтов 0xE2, 0x80 а также 0x99. Анкет Если вы проверете CP-1252 Кодовая макет, тогда вы увидите, что каждый из этих байтов обозначает отдельных персонажей â, а также .


И как я могу это исправить?

Используйте UTF-8 вместо CP-1252 для чтения, записи, хранения и отображения символов.


У меня есть набор типа контента в 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 -форму, которые неправильно закодированы/декодированы.


Вот еще несколько ссылок, чтобы узнать больше о проблеме:

У меня есть несколько документов, где показал как … а также ê показал как ê. Анкет Вот как он попал туда (код Python):

# Adam edits original file using windows-1252
windows = '\x85\xea' 
# that is HORIZONTAL ELLIPSIS, LATIN SMALL LETTER E WITH CIRCUMFLEX

# Beth reads it correctly as windows-1252 and writes it as utf-8
utf8 = windows.decode("windows-1252").encode("utf-8")
print(utf8)

# Charlie reads it *incorrectly* as windows-1252 writes a twingled utf-8 version
twingled = utf8.decode("windows-1252").encode("utf-8")
print(twingled)

# detwingle by reading as utf-8 and writing as windows-1252 (it's really utf-8)
detwingled = twingled.decode("utf-8").encode("windows-1252")

assert utf8==detwingled

Чтобы решить проблему, я использовал код Python, как это:

with open("dirty.html","rb") as f:
    dt = f.read()
ct = dt.decode("utf8").encode("windows-1252")
with open("clean.html","wb") as g:
    g.write(ct)

(Поскольку кто-то вставил сдвинутую версию в правильный документ UTF-8, мне фактически пришлось извлечь только тканированную часть, разорвать ее и вставить обратно. Я использовал BeautySoup для этого.)

Гораздо более вероятно, что у вас есть Чарли в создании контента, чем то, что конфигурация веб -сервера неверна. Вы также можете заставить свой веб-браузер добраться до страницы, выбрав кодировку Windows-1252 для документа UTF-8. Ваш веб -браузер не может разобрать документ, который сохранил Чарли.

Примечание: Та же самая проблема может произойти с любой другой однобайтовой кодовой страницей (например, Latin-1) вместо Windows-1252.

(Код Юникод U+2019 RIGHT SINGLE QUOTATION MARK) кодируется в UTF-8 в виде байтов:

0xE2 0x80 0x99.

’ (коды Юникода U+00E2 U+20AC U+2122) кодируется в UTF-8 в виде байтов:

0xC3 0xA2   0xE2 0x82 0xAC   0xE2 0x84 0xA2.

Это байты, которые ваш браузер фактически получает для создания ’ при обработке как UTF-8.

Это означает, что ваши исходные данные проходят два преобразования кодировок перед отправкой в ​​браузер:

  1. Источник характер (U+2019) сначала кодируется как байты UTF-8:

    0xE2 0x80 0x99

  2. эти отдельные байты тогда были неправильно истолкованный и декодируется в кодовые точки Unicode U+00E2 U+20AC U+2122 одним из Windows-125X кодировки (1252, 1254, 1256 и 1258 — все карты 0xE2 0x80 0x99 к U+00E2 U+20AC U+2122), а затем эти кодовые точки кодируются как байты UTF-8:

    0xE2 -> U+00E2 -> 0xC3 0xA2
    0x80 -> U+20AC -> 0xE2 0x82 0xAC
    0x99 -> U+2122 -> 0xE2 0x84 0xA2

Вам нужно найти, где выполняется дополнительное преобразование на шаге 2, и удалить его.

У вас есть несоответствие в кодировке вашего персонажа; Ваша строка кодируется в одной кодировке (UTF-8), и все, что интерпретирует эту страницу, использует другую (скажем, ASCII).

Всегда указывайте кодирование в своих заголовках HTTP и убедитесь, что это соответствует определению кодирования вашей структуры.

Образец заголовка HTTP:

Content-Type    text/html; charset=utf-8

Установка кодирования в ASP.NET

<configuration>
  <system.web>
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
  </system.web>
</configuration>

Установка кодирования в JSP

Это иногда случается, когда строка преобразуется От Windows-1252 до UTF-8 дважды.

У нас было это в приложении Zend/PHP/MySQL, где подобные символы появлялись в базе данных, вероятно, из -за соединения MySQL, не указавшего правильный набор символов. Мы должны:

  1. Убедитесь, что Zend и PHP общались с базой данных в UTF-8 (был нет по умолчанию)

  2. Отремонтируйте сломанные персонажи с помощью нескольких подобных запросов SQL ...

    UPDATE MyTable SET 
    MyField1 = CONVERT(CAST(CONVERT(MyField1 USING latin1) AS BINARY) USING utf8),
    MyField2 = CONVERT(CAST(CONVERT(MyField2 USING latin1) AS BINARY) USING utf8);
    

    Сделайте это за столько таблиц/столбцов, сколько необходимо.

Вы также можете исправить некоторые из этих строк в PHP, если это необходимо. Обратите внимание, что, поскольку персонажи были закодированы дважды, нам действительно нужно сделать обратное преобразование из UTF-8 обратно в Windows-1252, который сначала меня запутал.

mb_convert_encoding('’', 'Windows-1252', 'UTF-8');    // returns ’

Если ваш тип контента уже uTF8, то, вероятно, данные уже прибывают в неправильном кодировании. Если вы получаете данные из базы данных, убедитесь, что подключение к базе данных использует UTF-8.

Если это данные из файла, убедитесь, что файл кодируется правильно как UTF-8. Обычно вы можете установить это в диалоговом окне «Сохранить как ...» редактора по вашему выбору.

Если данные уже нарушены, когда вы просматриваете их в исходном файле, скорее всего, это был файл UTF-8, но был сохранен в неправильном кодировании где-то на этом пути.

Если кто-то получает эту ошибку на веб-сайте WordPress, вам нужно изменить WP-config DB Charset:

define('DB_CHARSET', 'utf8mb4_unicode_ci');

вместо:

define('DB_CHARSET', 'utf8mb4');

У вас должен быть текст копирования/вставки из документа Word. Документ Word Используйте интеллектуальные кавычки. Вы можете заменить его специальным символом (') или просто ввести в свой редактор HTML (').

Я уверен, что это решит вашу проблему.

То же самое случилось со мной с персонажем « -» (долгий знак минус).
Я использовал этот простой заменить, так что решайте:

htmlText = htmlText.Replace('–', '-');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top