Веб-сайт показывает, хотя я работаю с utf-8

Я использую pymysql, чтобы сделать следующую вставку в мою тестовую таблицу. Сначала я устанавливаю соединение, указываю кодировку и устанавливаю для юникода значение True:

conn=pymysql.connect(host=*ip*,user='simao_simao',password=*mypass*,database=*mydatabase*,use_unicode=True, charset="utf8")

Затем я успешно вставляю значения в свою таблицу.

cur = conn.cursor()
sql = "Insert into test (colx, coly) Values('%s', 'not_relevant')"%(tag)
>>> sql
"Insert into test (colx, coly) Values('£26,302 - £35,225 + 20% R','not_relevant')"
>>> cur.execute(sql)
1

Моя таблица готова к использованию Unicode utf-8

Мой HTML-код включает в себя:

meta charset="UTF-8"

Тем не менее я получаю символ � вместо £ на своей веб-странице. Есть идеи, что может быть не так?


person Prosonic    schedule 04.09.2016    source источник
comment
Итак, вы получаете сообщение об ошибке И символ замены �?   -  person Alastair McCormack    schedule 05.09.2016
comment
Я не получаю никакой ошибки. Я просто получаю замену, когда результаты загружаются на мой веб-сайт.   -  person Prosonic    schedule 05.09.2016
comment
Извините, теперь я понял, что вы имели в виду. Название относится к предыдущей ошибке, которую я имел, я собираюсь отредактировать ее сейчас.   -  person Prosonic    schedule 05.09.2016
comment
Вы действительно жестко кодируете данные в своем скрипте или читаете данные из внешнего источника, например, из текстового/CSV-файла?   -  person Alastair McCormack    schedule 05.09.2016
comment
Я извлекаю данные с веб-сайта с помощью pandas. Но оказывается, что символ фунта заменяется, даже когда я вручную делаю вставку прямо в свою таблицу.   -  person Prosonic    schedule 05.09.2016
comment
Хорошо, это очень важная информация. Похоже, что кодировка ваших данных не «utf-8». Вы можете проверить?   -  person Alastair McCormack    schedule 05.09.2016
comment
Я проверил, что это не связано со скриптом Python, следующим образом: удалил таблицу в моей базе данных. Создал новую таблицу с тем же именем, что и предыдущая (установил кодировку utf-8 unicode) вставил новые записи, набрав каждую вручную. Абсолютно никакого обхода, никакого Python, ничего не задействовано, только жестко закодированный скрипт SQL. Тем не менее я получаю нежелательный символ.   -  person Prosonic    schedule 05.09.2016
comment
Опять же, ваши данные, похоже, не закодированы в UTF-8. Как вы вводите каждый вручную?   -  person Alastair McCormack    schedule 05.09.2016
comment
Я использую свою панель phpMyAdmin, вводя следующий запрос вручную и запуская его: INSERT INTO simao_test.table_1 (VacId, DateInsert, JobTitle, Location, Url, ExternalDate, JobId, JobType, Salary, Profession, Sub_Profession, Sector, Description) VALUES ('123', '2016-09-03 10:22:27', 'Продавец-консультант', 'Лондон', 'пример. com», «2016-09-01», «KJDKA6», «Полный рабочий день», «23 000–32 000 фунтов стерлингов», «Ассистент по продажам», «Ассистент», «Нет специалиста», «Без описания» ); Заработная плата постоянно отображается с неправильным символом.   -  person Prosonic    schedule 05.09.2016
comment
В phpMyAdmin он отображается корректно?   -  person Alastair McCormack    schedule 05.09.2016
comment
Да. Он отлично показывает символ £.   -  person Prosonic    schedule 05.09.2016


Ответы (1)


https://stackoverflow.com/a/38363567/1766831

Следуйте совету по отладке с SELECT ... HEX..., чтобы убедиться, что £ правильно хранится как C2A3 (utf8), а не A3 (latin1) или C382C2A3 (двойное кодирование).

Укажите SHOW CREATE TABLE, чтобы убедиться, что столбец имеет формат utf8 или utf8mb4.

Убедитесь, что код начинается с # -*- coding: utf-8 -*-, чтобы кодировка была utf8. (Это охватывает одну из возможных причин появления черных бриллиантов; см. ссылку.)

Если этого недостаточно, ознакомьтесь с дополнительными примечаниями по Python здесь: http://mysql.rjweb.org/doc.php/charcoll#python

person Rick James    schedule 05.09.2016
comment
Отладил его и он корректно хранится в C2A3. Это извлечено из таблицы создания: Salary varchar(75) COLLATE utf8_unicode_ci NOT NULL Теперь я не использую Python, я удалил таблицу в своей базе данных. Создал новую таблицу с тем же именем, что и предыдущая (установил кодировку utf-8 unicode) вставил новые записи, набрав каждую вручную. Абсолютно никакого обхода, никакого Python, ничего не задействовано, только жестко закодированный скрипт SQL. Вероятно, это проблема с php-кодом, но я не понимаю почему, я использую: ‹code› ‹meta charset=UTF-8› ‹/code› - person Prosonic; 05.09.2016
comment
Hex, который я получил для этого значения: «23 000 фунтов стерлингов - 32 000 фунтов стерлингов», был: C2A332332C303030202D20C2A333322C303030. - person Prosonic; 05.09.2016
comment
C2A3 — хорошо, похоже, веб-браузер работает неправильно. Мета должна быть правильной. Вручную набрано?? Должен быть какой-то клиент. Этот клиент должен быть закодирован в utf8, а не в latin1. Этот клиент должен подключаться с помощью utf8, например, используя SET NAMES utf8. - person Rick James; 05.09.2016