Maxmind Geoip 城市编码问题
Maxmind Geoip city encoding issue
在使用 Nginx 配置 Max Mind 时(使用 proxy_set_header GEOIP_CITY $geoip_city;
之类的东西),当城市名称中有重音符号时(例如蒙特利尔),我遇到了编码问题。
我找遍了都没有找到nginx的开关来强制utf-8编码。我错过了什么?
我试图 city.force_encoding('iso-8859-1').encode('utf-8')
站在 ruby 一边,但没有骰子。
谢谢!
虽然没有记录,it appears您可以强制 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,GeoListeCity.dat 似乎使用了 ANSI 编码。由于有些地方没有英文翻译,可能会造成编码混乱...
Fernando 解决方案有效,但以防万一 geoLiteCity.dat 的较新版本使用非 ISO-8859-1 兼容字符集,您还可以使用 [=11 确保最终字符串为 UTF-8 编码=]:
$location->city = mb_convert_encoding($location->city, 'UTF-8');
在使用 Nginx 配置 Max Mind 时(使用 proxy_set_header GEOIP_CITY $geoip_city;
之类的东西),当城市名称中有重音符号时(例如蒙特利尔),我遇到了编码问题。
我找遍了都没有找到nginx的开关来强制utf-8编码。我错过了什么?
我试图 city.force_encoding('iso-8859-1').encode('utf-8')
站在 ruby 一边,但没有骰子。
谢谢!
虽然没有记录,it appears您可以强制 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,GeoListeCity.dat 似乎使用了 ANSI 编码。由于有些地方没有英文翻译,可能会造成编码混乱...
Fernando 解决方案有效,但以防万一 geoLiteCity.dat 的较新版本使用非 ISO-8859-1 兼容字符集,您还可以使用 [=11 确保最终字符串为 UTF-8 编码=]:
$location->city = mb_convert_encoding($location->city, 'UTF-8');