JSON Deserialization - одиночная кавычка появляется как [дубликат]

Одиночные кавычки должны использоваться для строковых значений, например, в списке VALUES ().

Backticks обычно используются для указания идентификатора, а также могут быть безопасны из-за случайного использования зарезервированных ключевых слов.

В сочетании PHP и MySQL двойные кавычки и одинарные кавычки значительно упрощают время записи запросов.

95
задан Cole Johnson 29 December 2013 в 01:43
поделиться

11 ответов

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

Или используйте ’.

40
ответ дан kennytm 24 August 2018 в 00:03
поделиться

Вместо знака фунта я использовал: & amp; фунт; без пространства. Это разрешило эту проблему для меня.

Для евро: & amp; евро; без пробела.

-5
ответ дан Andrew Barber 24 August 2018 в 00:03
поделиться

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

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

< hr>

и как его исправить?

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


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

169
ответ дан BalusC 24 August 2018 в 00:03
поделиться

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

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

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

7
ответ дан Cole Johnson 24 August 2018 в 00:03
поделиться

Если кто-то получил эту ошибку на веб-сайте WordPress, вам необходимо изменить wp-config db charset:

define('DB_CHARSET', 'utf8mb4_unicode_ci');

вместо:

define('DB_CHARSET', 'utf8mb4');
3
ответ дан Goran Jakovljevic 24 August 2018 в 00:03
поделиться

Вы должны иметь текст для копирования / вставки из Word Document. Документ Word использует Smart Quotes. Вы можете заменить его специальным символом (& amp; rsquo;) или просто ввести свой HTML-редактор (').

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

-1
ответ дан Kaushal Panchal 24 August 2018 в 00:03
поделиться

У вас несоответствие в кодировке вашего персонажа; ваша строка кодируется в одной кодировке (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

7
ответ дан Michael 24 August 2018 в 00:03
поделиться

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

htmlText = htmlText.Replace('–', '-');
-3
ответ дан Radim Köhler 24 August 2018 в 00:03
поделиться

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

0xE2 0x80 0x99.

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

0xC3 0xA2 & nbsp; 0xE2 0x82 0xAC & nbsp; 0xE2 0x84 0xA2.

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

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

  1. Символ источника (U+2019) сначала кодируется как байты UTF-8: 0xE2 0x80 0x99
  2. эти отдельные байты затем были неправильно интерпретированы и декодированы в Unicode codepoints 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.

8
ответ дан Remy Lebeau 24 August 2018 в 00:03
поделиться

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

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

  1. Обеспечить, чтобы Zend и PHP обменивались данными с базой данных в UTF-8 (по умолчанию был not )
  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 ’
6
ответ дан Simon East 24 August 2018 в 00:03
поделиться

У меня есть некоторые документы, где показывался как … и ê показывался как ê. Вот как это получилось (код 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)

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

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

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

13
ответ дан Tiny 24 August 2018 в 00:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: