Общая путаница с кодировкой! : -)
Набор символов таблицы
Набор символов таблицы MySQL определяет только то, какую кодировку MySQL следует использовать для внутреннего использования, и, следовательно, допустимый диапазон символов.
- Если вы установите его на Latin-1 (он же ISO 8859-1 ), вы не сможете хранить международные символы в вашей таблице.
- Важно, что набор символов не влияет на кодировку, используемую MySQL при взаимодействии с вашим PHP-скриптом.
- В таблице сличения указаны правила сортировки.
Набор символов подключения
Набор символов соединения MySQL определяет кодировку, в которую вы получаете данные таблицы (и должна отправлять данные в MySQL).
- Кодировка устанавливается с помощью SET NAMES, например,
SET NAMES "utf8"
.
- Если это не соответствует кодировке таблицы, MySQL автоматически конвертирует данные на лету.
- Если это не соответствует вашему набору символов страницы, вам придется вручную выполнить преобразование набора символов в PHP, используя, например, utf8_encode или mb_convert_encoding .
Набор символов страницы
Набор символов страницы, указанный с помощью заголовка Content-Type , сообщает браузеру, как интерпретировать вывод PHP-скрипта.
- Как заголовок HTTP, он не сохраняется при сохранении файла из браузера. Таким образом, информация недоступна для OpenOffice или других программ.
Рекомендации
В идеале вы должны использовать одну и ту же кодировку во всех трех местах, а в идеале эта кодировка должна быть UTF-8.
Однако CSV вызовет проблемы, поскольку формат файла не включает информацию о кодировке. Таким образом, приложение должно угадать кодировку, и, как вы видели, догадка будет неправильной.
Лучше всего использовать Latin-1 для CSV-файла. Тем не менее, я бы по-прежнему использовал UTF-8 для таблиц и наборов символов соединения, а также UTF-8 для HTML-страниц.
Если вы используете UTF-8 для набора символов соединения (выполнив SET NAMES "utf8"
после подключения), вам нужно будет выполнить текст через utf8_decode для преобразования в Latin-1.
Проблема этой сущности
Я также передаю эти данные в salesforce и получаю сообщение об ошибке: «Объект« Atilde »был указан, но не объявлен».
Звучит так, будто вы передаете код HTML в контексте XML и не связаны с наборами символов. Попробуйте выполнить текст через html_entity_decode .