0

我将 Google Places Autocomplete api 用于将重音字符作为输入的 Web 应用程序。

我正在尝试从输入字符串中去除重音符号,以便 Google Places Autocomplete 可以正常工作。

当我在浏览器中键入以下字符串sévin时,我在 IDE 中得到以下信息:

屏幕截图

然后,当然,我得到的不是以下无重音字符串:sevin,而是类似:sA©vin

我不知道在我的应用程序的哪一层发生了编码问题。

这是 JQuery/JS:

ajax : {
            url : base + '/geolocation/addressAutocomplete',
            dataType : 'json',
            data : function(term) {
                return {
                    address: term
                };
            },
            results : function(data) {
                if (data.status == 'OK') {
                    return {
                        results : $.map(data.predictions, function(item) {
                            return {
                                id : item.reference,
                                text : item.description
                            };
                        })
                    };
                }
            }
        },

这是 Spring MVC 控制器方法:

@RequestMapping(value = "/addressAutocomplete", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public GooglePlacesAutocompleteResponse validateAddressAutocomplete(@RequestParam String address) {
        return geolocationService.autocompleteAddress(address);
    }

有人可以帮忙吗?

4

4 回答 4

3

事实证明这是Tomcat的问题。

URIEncoding属性设置为UTF-8Connector标签后server.xml,问题就消失了。

见下文:

<Connector
port="8080"
URIEncoding="UTF-8"
...
于 2013-09-18T07:47:27.207 回答
1

嗨@balteo也许你可以尝试做这样的事情:contentType: "application/x-www-form-urlencoded; charset=UTF-8"进入ajax请求,

ajax: {
        url: base + '/geolocation/addressAutocomplete',
        dataType: 'json',   
        contentType: "application/x-www-form-urlencoded; charset=UTF-8",
        data: function(term) {
            return {
                address: term
            };
        },
        results: function(data) {
            if(data.status == 'OK') {
                return {
                    results: $.map(data.predictions, function(item) {
                        return {
                            id: item.reference,
                            text: item.description
                        };
                    })
                };
            }
        }
    },

我希望能帮助你:)

于 2013-09-17T22:14:13.820 回答
1

您是否指定了 Unicode 传输格式(例如 UTF-8 或 UTF-16)作为表单的接受字符集属性?如果浏览器默认为非 Unicode 字符集,则重音字符可能未正确编码。我会先试试。

尝试将 accept-charset="UTF-8" 或 accept-charset="UTF-16" 添加到表单标签。

于 2013-09-17T22:14:44.977 回答
1

利用

        decodeURIComponent(escape(item.description)) 

代替

        item.description

将解决此问题

于 2017-09-13T15:26:15.923 回答