Как я могу узнать, какой символ определенная строка кодирует в моей базе данных? - PullRequest
2 голосов
/ 29 января 2020

Недавно я экспортировал части своей базы данных mySQL и заметил, что в тексте есть несколько странных символов. Например, часто появлялась строка ’.

Когда я пытался выяснить, что это значит, я нашел вопрос stackoverflow: Кодировка символов и проблема . Из этого вопроса я теперь знаю, что строка ’ обозначает кавычку.

Но как я могу узнать более широко, что означает строка символов? Например, буква Â также часто появляется в моей базе данных и на самом деле вызывает у меня проблему на определенной странице, и для ее решения мне хотелось бы знать, что означает этот символ.

Я просмотрел несколько таблиц, показывающих кодировку символов, но не смог выяснить, как использовать эти таблицы, чтобы понять, почему ’ означает ', или, что более важно для меня, что означает  , Я был бы очень признателен, если бы кто-то мог указать мне правильное направление.

1 Ответ

1 голос
/ 30 января 2020

Латинская кодировка для ’ (в шестнадцатеричном формате) E28099.

Кодировка utf8 для : E28099.

Но вы вставили в C3A2E282ACE284A2 , что является «двойным кодированием» этого апострофа.

Очевидно, что у вас было в клиенте; клиент генерировал кодировки utf8. Но ваши параметры подключения к MySQL сказали "latin1". Итак, ваш оператор INSERT покорно обработал его как 3 латинских символа E2 80 99 (визуально ’) и преобразовал каждый из них в utf8, hex C3A2 E282AC E284A2.

Прочитайте о "двойном кодировании" в Проблемы с символами UTF-8; я вижу не то, что я сохранил

Между тем, браузеры, как правило, прощают двойное кодирование, иначе может показаться, что ’

символы латиницы 1 - 1 байт (2 шестнадцатеричные цифры). символы utf8 / utf8mb4 имеют размер от 1 до 4 байтов; некоторые 2-байтовые и 3-байтовые кодировки появились в вашем упражнении.

Что касается  ... Go до http://mysql.rjweb.org/doc.php/charcoll#8_bit_encodings и посмотрите на вторую таблицу там. Обратите внимание, что в первых двух столбцах много всего, начиная с Â. В латинице 1 это hex C2. В utf8 многие знаки препинания кодируются как 2 байта: C2xx. Например, символ авторского права © - это utf8 hex C2A9, что неверно истолковано ©.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...