Узнать кодировку символов straße

Я борюсь с кодировкой содержимого внешнего интерфейса. В базе данных MySQL сопоставление latin1_swedish_ci. Также сопоставление поля latin1_swedish_ci. PHP-скрипт закодирован в UTF-8, и вывод в браузере дает мне UTF-8. Все работает нормально, кроме содержимого этой базы данных. Соединение с базой данных должно быть UTF-8 (Typo3 4.7), а содержимое

улица

но это должно быть straße.

mb_detect_encoding($data['street'],'UTF-8') говорит, что это UTF-8. Если я использую utf8_decode(), я получаю

улица

Если я использую utf8_encode(), я получаю

улица

Мое предположение заключалось в том, что данные в кодировке UTF-8 хранятся в ISO-8859-1, но если это так, то здесь не должно быть таких проблем. Как узнать какая реальная кодировка?

PS: Я не могу изменить кодировку источника!

Мое решение моей первоначальной проблемы:

Мне пришлось установить соединение с базой данных с UTF-8 на ISO-8859-1 с помощью этой строки кода.

$res = $GLOBALS['TYPO3_DB']->sql_query("SET NAMES latin1");

person testing    schedule 25.03.2013    source источник


Ответы (3)


Символ ß 'СТРОЧНАЯ ЛАТИНСКАЯ БУКВА SHARP S' (U+00DF) существуют в UTF-8 байтов 0xC3 и 0x9F согласно связанному сайту:

UTF-8 (шестнадцатеричный) 0xC3 0x9F (c39f)

Если мы посмотрим на макет кодовой страницы ISO-8859-1, то эти байты представляют символы Ã и символ, не определенный в макете кодовой страницы ISO-8859-1. Значит это не то. Другой распространенной кодировкой символов, которая частично совпадает с ISO-8859-1, является Windows CP1252 (также известная как ANSI, используемая по умолчанию при сохранении текстового файла в Блокноте, которую можно переопределить, используя вместо этого Сохранить как). Если мы посмотрим на разметку кодовой страницы CP1252, то эти байты представляют символы Ã и Ÿ. что подтверждает то, что вы изначально получаете.

Так что, скорее всего, это кодировка CP1252.

person BalusC    schedule 25.03.2013

То, что вы видите как «ÃŸ», на самом деле является интерпретацией Windows-1252 (также известной как CP1252) двух байтов 0xC3 и 0x9F, которые составляют кодировку UTF-8 для «ß». Но это, по-видимому, означает, что данные на самом деле закодированы в UTF-8 и просто неправильно интерпретируются как закодированные в Windows-1252. Поэтому я думаю, что его следует просто обрабатывать как UTF-8 с должными предосторожностями.

person Jukka K. Korpela    schedule 25.03.2013

Я рекомендую вам перейти к проверке того, какая кодировка используется вашим соединением sql. это НЕ обязательно совпадает с набором символов, который вы определяете для своей базы данных.

ИЗ PHP

// Opens a connection to a MySQL server
$connection = mysql_connect ($server, $username, $password);
$charset = mysql_client_encoding($connection);
$flagChange = mysql_set_charset('utf8', $connection);
echo "The character set is: $charset</br>mysql_set_charset result:$flagChange</br>";

ВНУТРИ PHPMYADMIN

  1. открыть базу данных information_schema
  2. открыть стол schemata
  3. проверьте свою mysql сортировку по умолчанию

вы можете или не можете изменить эти параметры, в зависимости от привилегий пользователя.

как показано выше, я решил свои проблемы с конфликтующими наборами символов в mysql, добавив следующую строку в мой файл connection.php (который я вызываю в начале каждой страницы, использующей доступ к базе данных):

$flagChange = mysql_set_charset('utf8', $connection);
person tony gil    schedule 04.12.2013