Проблема кодирования города Maxmind Geoip
При настройке Max Mind с Nginx (используя что-то вроде proxy_set_header GEOIP_CITY $geoip_city;
), У меня возникают проблемы с кодировкой названия города, когда в нем есть акценты (например, Монреаль).
Я ищу везде и не могу найти ключ nginx для принудительного кодирования utf-8. Что мне не хватает?
Я пытался city.force_encoding('iso-8859-1').encode('utf-8')
на стороне рубина, но без игры в кости.
Спасибо!
3 ответа
Хотя это не задокументировано, похоже, что вы можете заставить модуль Nginx использовать UTF-8. Чтобы использовать это, я полагаю, вы загружаете базу данных следующим образом:
http {
geoip_city GeoLiteCity.dat utf8;
...
Ты можешь использовать utf8_encode()
чтобы получить результаты, которых вы пытаетесь достичь.
Например (в php):
// $city_name = $record->city;
$city_name = utf8_encode($record->city);
Несмотря на то, что MaxMind предоставляет API GeoIPCity, который использует UTF-8 в качестве кодировки по умолчанию, похоже, что GeoListeCity.dat использует кодировку ANSI. Поскольку в некоторых местах нет перевода на английский, это может привести к путанице в кодировке...
Решение Fernando работает, но на случай, если в новых версиях geoLiteCity.dat используется кодировка, не совместимая с ISO-8859-1, вы также можете убедиться, что окончательная строка имеет кодировку UTF-8, используя mb_convert_encoding
:
$location->city = mb_convert_encoding($location->city, 'UTF-8');