Google 地图+货币转换器特殊字符问题

Google Maps + Currency Converter Special Characters Issue

应用程序信息:我有一个货币转换器应用程序,其前端是一个 Google 地图,其中包含在用户位置打开的 window 信息。信息 window 上有一个货币转换表,带有两个下拉菜单和我从 API 获得的货币列表。我使用反向地理编码从地理位置坐标或用户单击某个地点时获取国家或地区的名称。

我遇到的问题是其中包含特殊字符的国家或地区的名称。我发现当我点击这样一个国家或地区时,应用程序不知道在下拉菜单中选择什么货币,这使得它只选择第一种货币 (AED)。即使我使用 HTML 转义序列或复制粘贴国家名称(我正在将国家名称和相应的货币缩写打印到控制台,所以我尝试复制粘贴国家名称country 打印到控制台,因为它来自 Google Maps,所以我需要使用它来避免差异问题;对于名称中有特殊字符的国家或地区,例如带有重音符号的字母在它上面或斜杠上,代替货币缩写打印的是单词 undefined),我遇到了同样的问题。

我正在使用第三方 CommonJS 模块进行国家货币映射,该模块有一个 getCountryAbbreviation 函数,我可以将国家名称传递给该函数以获得货币缩写那个国家。我传递给上述函数的名称必须与模块源代码中使用的名称相匹配,否则它将不起作用。我使用的模块是 https://github.com/payscale/country-currency-map. This is my own JavaScript code: https://gist.github.com/DragonOsman/c6e8fb15343544e662f474c5a526d1c2。我正在使用 Browserify 让浏览器了解该模块。

那么有人知道我该如何解决这个问题吗?如果我需要澄清一些事情或添加更多信息,请告诉我。

我解决了特殊字符问题。

如果还有其他人需要这些信息:我所做的是在我使用的模块中保留国家/地区名称而没有特殊字符,只是将反向地理编码返回的名称中的特殊字符替换为 "normal" 版本。然后就成功了。

代码如下:

let geo_coder = new google.maps.Geocoder();
geo_coder.geocode({ 'location': location }, function (geocode_results, status) {
    let currency_abbr;
    if (status === google.maps.GeocoderStatus.OK) {
        if (geocode_results[1]) {
            let country = null;
            for (let r = 0, rl = geocode_results.length; r < rl; r++) {
                let result = geocode_results[r];
                if (!country && result.types[0] === "country") {
                    country = result.address_components[0].long_name;
                    console.log(country);
                    const fixed = result.address_components[0].long_name.normalize("NFKD").replace(/[^\x00-\x7f]/g, "");
                    result.address_components[0].long_name = fixed;
                    country = fixed;
                    currency_abbr = country_currency_map.getCurrencyAbbreviation(country);
                    console.log(currency_abbr);
                }
            }   
        }
    } else {
        form.innerHTML += "Geocoding not for the following reason: " + status;         
    }

    for (let i = 0; i < select2.options.length; i++) {
        select2.options[i].selected = select2.options[i].id === currency_abbr;
    }
});