Ubuntu下MySQL5.7+PHP7.0+Okhttp3.7.0中文乱码问题解决方案

在安卓手机app做登陆和注册功能时,如果传输中文,经常会遇到乱码的问题。这也是个很头疼的问题。首先,从前端将数据post出去,假设是用Okhttp进行,传至后端的php程序,然后连接上服务器中的mysql,判断后回传结果。整个流程中多处涉及数据的编码,如果有一处编码不一致,那数据就会出现乱码的问题。当然如果是纯英文,一般没有问题。

我最近正好自己做了这个功能,前端用的是Okhttp,后端用的是阿里云的Ubuntu下的php7.0+mysql5.7。

Okhttp部分:

OkHttpClient client=new OkHttpClient();
FormBody body = new FormBody.Builder()
          .add("键",值)
          .build();
  Request request = new Request.Builder()
          .url("服务器php")
          .post(body)
          .build();
  Response response=client.newCall(request).execute();
  String responseData=response.body().string();
PHP部分:

<?php
header("Content-type:text/html;charset=utf-8");//必须设置为utf-8

include 'conn.php';//与mysql连接的文件,在下面
...//sql判断
echo $result;//返回结果
?>

<?php//conn.php
$server="";
$username="";
$password="";
$dbname="";
$con=mysqli_connect($server,$username,$password,$dbname);
if(!$con)
{
die("Fail" . mysqli_error());
}
mysqli_query("set character set utf8");//关键
mysqli_query("set names utf8");//关键
?>
linux中查看文件的编码方式可以通过在vi中命令模式下输入:set fileencoding来查看,如果不是,可以通过conv命令实现,自行百度。

MySQL部分:
主要问题就是如何设置MySQL的database,server的编码方式是否是utf-8。

第一步:输入mysql -u root -p,输入密码进入mysql。

第二步:show variables like 'character%';结果如图(以下截图是我已经设置好之后的,默认database和server应该是latin1)

第三步:接下来的操作参见点击打开链接主要就是修改mysql.conf.d/mysqld.cnf和conf.d/mysql.cnf

最后就不会出现乱码了!




发布了40 篇原创文章 · 获赞 28 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/lyandgh/article/details/79027765