所以来自俄罗斯的人从我的网站上做出了反向地理编码回复。我解析Json并将城市和州连接成客户端的一个字符串。这就是串联字符串最终的结果:
???? ?????-?????????, ??????
Google会发送什么情况吗?通过反向地理编码响应标记回Json?纬度/经度是正确的。当我通过浏览器直接制作相同的Json帖子时,我得到了正确的回复:
http://maps.googleapis.com/maps/api/geocode/json?latlng=60.0486851,30.3197483&sensor=true
有人有什么想法吗?
可能是因为我从美国访问Json,他是从俄罗斯访问的吗?
编辑:连接发生在这里:
首先我得到结果:
geocoder.geocode({'latLng': realUsersLoc}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
var loc = getCityState(results);
function getCityState(results)
{
var city = '';
var state = '';
var bad = '';
var good = '';
var us = true;
// check for non-us
for (var i = 0; i < results[0].address_components.length; i++)
{
var shortname = results[0].address_components[i].short_name;
var longname = results[0].address_components[i].long_name;
var type = results[0].address_components[i].types;
if (type.indexOf("country") != -1)
{
if (!isNullOrWhitespace(shortname))
{
us = (shortname == 'US');
}
else
{
us = (longname == 'United States');
}
}
}
if (!us)
{
for (var i = 0; i < results[0].address_components.length; i++)
{
var shortname = results[0].address_components[i].short_name;
var longname = results[0].address_components[i].long_name;
var type = results[0].address_components[i].types;
if (type.indexOf("country") != -1)
{
if (!isNullOrWhitespace(longname))
{
state = longname;
}
else
{
state = shortname;
}
}
if (type.indexOf("administrative_area_level_1") != -1)
{
if (!isNullOrWhitespace(shortname))
{
city = shortname;
}
else
{
city = longname;
}
}
else if (type.indexOf("locality") != -1)
{
if (!isNullOrWhitespace(shortname))
{
city = shortname;
}
else
{
city = longname;
}
}
}
}
else
{
// us
for (var i = 0; i < results[0].address_components.length; i++)
{
var shortname = results[0].address_components[i].short_name;
var longname = results[0].address_components[i].long_name;
var type = results[0].address_components[i].types;
if (type.indexOf("administrative_area_level_1") != -1)
{
if (!isNullOrWhitespace(shortname))
{
state = shortname;
}
else
{
state = longname;
}
}
else if (type.indexOf("locality") != -1)
{
if (!isNullOrWhitespace(shortname))
{
city = shortname;
}
else
{
city = longname;
}
}
else if (type.indexOf("administrative_area_level_3") != -1)
{
if (!isNullOrWhitespace(shortname))
{
good = shortname;
}
else
{
good = longname;
}
}
else if (type.indexOf("administrative_area_level_2") != -1)
{
if (!isNullOrWhitespace(shortname))
{
bad = shortname;
}
else
{
bad = longname;
}
}
}
if (city == '')
{
if (good != '')
{
city = good;
}
else
{
city = bad;
}
}
}
if (isNullOrWhitespace(city) && isNullOrWhitespace(state))
{
return 'N/A';
}
if (isNullOrWhitespace(city))
{
return state;
}
else if (isNullOrWhitespace(state))
{
return city;
}
return (city + ', ' + state)
}
答案 0 :(得分:2)
考虑到带有问号的短划线的存在,这似乎极有可能是字符集问题,而不是Google发回问号的情况。 (您有多少确定您的网站将UTF-8指定为其字符集?)如果您不关心国际化,那么您可以通过使用language
参数将结果强制为英语来解决此问题。网址(见下文)。当然,这并不理想,但某些用途可能是可以接受的。
如果上述解决方法无法接受,请尝试使用http://maps.googleapis.com/maps/api/geocode/json?latlng=60.0486851,30.3197483&sensor=true&language=ru的结果运行代码(请注意最后添加language
参数以强制它返回俄语在各种浏览器上查看是否可以复制问号问题。 (如果您知道用户在遇到问题时使用的浏览器/平台,那就更好了。)
答案 1 :(得分:0)
也许该人的回复是用西里尔语或其他语言返回的内容,而且你的字符集不是正确的?