无法在数据库中正确保存不同语言的地址
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 collation更改为UTF-8 General CI,但问题依然存在。
我使用模拟位置应用程序测试了我的应用程序,但无法重现此问题。
造成这种情况的可能原因和解决方法是什么?
【问题讨论】:
【参考方案1】:我终于能够解决这个问题。这是一个php后端问题。为了解决这个问题,我必须在连接到数据库后添加以下行。
mysql_set_charset('utf8')
更多参考请查看this链接
除此之外,Multipart Request 也存在问题。我使用标准 http 库通过 Multipart 请求发送位置地址和其他参数,这在输入 php 数据库时导致问题。
为了解决这个问题,我们在应用程序和后端使用UrlEncode/Decode
。所以我们以编码形式发送地址,在服务器端解码时,这次地址是正确的。
希望这可以帮助任何人。
【讨论】:
以上是关于无法在数据库中正确保存不同语言的地址的主要内容,如果未能解决你的问题,请参考以下文章