Когда вы видите, что «странный квадратный символ с вопросительным знаком внутри», иначе известный как ЗАМЕНА ХАРАКТЕРА , это, как правило, показатель того, что у вас есть байт в диапазоне 80-FF (128- 255) и система пытается отобразить его в UTF-8.
Весь этот диапазон байтов недопустим для однобайтовых символов в UTF-8, но все они очень распространены в западных кодировках, таких как ISO-8859-1.
Когда я просматриваю вашу страницу и вручную переключаю кодировку символов с UTF-8 на ISO-8859-1 (в Firefox с View
>> Character Encoding
>> Western (ISO-8859-1)
), тогда POUND SIGN отображается правильно.
Так что же тогда не так? Трудно сказать - есть десятки мест, где это можно испортить. Но, скорее всего, это на уровне базы данных. Установка CHARSET на столе в UTF8, как правило, недостаточно. Все ваши кодировки и сопоставления должны быть в порядке, прежде чем персонажи будут правильно перемещаться по системе. Общая ловушка неправильно установлена кодировки соединения , поэтому я бы начал с нее.
Дайте мне знать, если вам нужно больше указаний.
EDIT
Чтобы проверить, какие байты на самом деле хранятся для этого значения, выполните этот запрос.
SELECT hex( currency_symbol )
FROM country
WHERE country_name = 'UK'
Если вы видите A3
, то вы знаете, что символ сохраняется как ISO-8859-1. Это означает, что проблема возникает во время или перед записью в БД.
Если вы видите C2A3
, то вы знаете, что символ сохраняется как UTF-8. Это означает, что проблема возникает после чтения из БД и перед записью в браузер.
РЕДАКТИРОВАТЬ 2
-- Database
SELECT default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'your_db_name';
-- Table
SELECT table_collation
FROM information_schema.tables
WHERE TABLE_NAME = 'country';
-- Columns
SELECT collation_name
FROM information_schema.columns
WHERE TABLE_NAME = 'country';