无法在数据库中正确保存不同语言的地址

Posted

技术标签:

【中文标题】无法在数据库中正确保存不同语言的地址【英文标题】:Unable to save address properly of different languages in database 【发布时间】:2017-05-19 15:04:22 【问题描述】:

场景:

我正在创建一个获取用户当前位置的应用程序,并使用获取的纬度和经度,我使用以下代码从中找到地址:

private String getAddress(double latitude,double longitude) 
    Geocoder geocoder;
    List<Address> addresses;
    String adress="";
    geocoder=new Geocoder(getApplicationContext(),Locale.ENGLISH);

    try 
        addresses=geocoder.getFromLocation(latitude,longitude,1);
        String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
        String city = addresses.get(0).getLocality();
        String state = addresses.get(0).getAdminArea();
        String country = addresses.get(0).getCountryName();
        String postalCode = addresses.get(0).getPostalCode();
        String knownName = addresses.get(0).getFeatureName();
        adress=address+","+city+","+state+","+country+","+postalCode;
        // Here 1 represent max location result to returned, by documents it recommended 1 to 5
     catch (IOException e) 
        e.printStackTrace();
    
    return adress;

地址以及经纬度通过网络服务发送到服务器。

问题:

此代码在我的国家(即印度)运行良好,但在哈萨克斯坦等其他国家/地区,我无法获得正确的英语地址。它看起来像这样。

当我搜索解决这个问题时,我想到了以下解决方案:

    之前我使用 Default Locale 从 lat 获取地址,long 导致了问题。所以我将语言环境更改为英语,这在一定程度上解决了问题,因为它现在以英语返回。 我也将php后端中的database collat​​ion更改为UTF-8 General CI,但问题依然存在。

我使用模拟位置应用程序测试了我的应用程序,但无法重现此问题。

造成这种情况的可能原因和解决方法是什么?

【问题讨论】:

【参考方案1】:

我终于能够解决这个问题。这是一个php后端问题。为了解决这个问题,我必须在连接到数据库后添加以下行。

mysql_set_charset('utf8')

更多参考请查看this链接

除此之外,Multipart Request 也存在问题。我使用标准 http 库通过 Multipart 请求发送位置地址和其他参数,这在输入 php 数据库时导致问题。

为了解决这个问题,我们在应用程序和后端使用UrlEncode/Decode。所以我们以编码形式发送地址,在服务器端解码时,这次地址是正确的。

希望这可以帮助任何人。

【讨论】:

以上是关于无法在数据库中正确保存不同语言的地址的主要内容,如果未能解决你的问题,请参考以下文章

如何在核心数据中正确保存可转换对象?

如何在 Core Data 中正确保存?

如何在 Swift 中正确实现不同视图控制器之间的协议和委托?

在 Symfony 中正确保存相关实体(外键)

如何在 django 中正确保存多个文件?

如何在 Windows DLL 中正确实现和关闭休眠线程