Maxmind Geoip城市编码问题

当使用NginxconfigurationMax Mind时(使用类似proxy_set_header GEOIP_CITY $geoip_city; ),当城市名称中带有重音符(如蒙特利尔)时,我会得到城市名称的编码问题。

我到处search,找不到一个用于强制utf-8编码的nginx开关。 我错过了什么?

我尝试了city.force_encoding('iso-8859-1').encode('utf-8')在ruby方面city.force_encoding('iso-8859-1').encode('utf-8') ,但没有骰子。

谢谢!

虽然没有记录, 但似乎可以强制Nginx模块使用UTF-8。 为了使用这个,我相信你以下面的方式加载数据库:

 http { geoip_city GeoLiteCity.dat utf8; ... 

您可以使用utf8_encode()来获得您正在尝试实现的结果。

例如(在PHP中):

 // $city_name = $record->city; $city_name = utf8_encode($record->city); 

尽管MaxMind提供了使用UTF-8作为默认字符集的GeoIPCity API,但似乎GeolistCity.dat使用ANSI编码。 由于有些地方没有英文翻译,可能会导致编码混淆。

费尔南多解决方案正在工作,但为了防止更新版本的geoLiteCity.dat使用非ISO-8859-1兼容字符集,还可以使用mb_convert_encoding确保最终字符串是UTF-8编码:

 $location->city = mb_convert_encoding($location->city, 'UTF-8');