【问题标题】:Spanish characters ("`", "´", "ñ") not showing in database西班牙语字符(“`”、“´”、“ñ”)未显示在数据库中
【发布时间】:2016-08-29 10:59:55
【问题描述】:

我有一个将数据发送到数据库的 Android 应用程序,但在数据库中某些字符存储错误(例如:í -> Ã)。

我的 URLEncoders 使用 UTF-8,数据库也有(如果我手动引入“í”,“í”是正确存储的,所以我认为这不是数据库错误),我在我的 php 脚本中指出要使用UTF-8 所以我不知道我还能尝试什么。

Java

public class SendPostRequest extends AsyncTask<String, Void, String> {

    protected void onPreExecute(){}

    protected String doInBackground(String... arg0) {

        try {

            URL url = new URL("https://www.web.com/script.php"); // here is your URL path

            JSONObject postDataParams = new JSONObject();
            postDataParams.put("user", user);
            postDataParams.put("texto", edit_text_value);
            postDataParams.put("l_origen", lengor_value);
            postDataParams.put("l_destino", lengdest_value);
            postDataParams.put("precio", precio);
            postDataParams.put("num_pal", num_pal);
            Log.e("params",postDataParams.toString());

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(15000 /* milliseconds */);
            conn.setConnectTimeout(15000 /* milliseconds */);
            conn.setRequestMethod("POST");
            conn.setDoInput(true);
            conn.setDoOutput(true);

            OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
            writer.write(getPostDataString(postDataParams));

            writer.flush();
            writer.close();
            os.close();

            int responseCode=conn.getResponseCode();

            if (responseCode == HttpsURLConnection.HTTP_OK) {

                BufferedReader in=new BufferedReader(new
                        InputStreamReader(
                        conn.getInputStream()));

                StringBuffer sb = new StringBuffer("FUAAARK");
                String line="";

                while((line = in.readLine()) != null) {

                    sb.append(line);
                    break;
                }

                in.close();
                return sb.toString();


            }
            else {
                return new String("false : "+responseCode);
            }
        }
        catch(Exception e){
            return new String("Exception: " + e.getMessage());
        }

    }

    @Override
    protected void onPostExecute(String result) {
        Toast.makeText(getApplicationContext(), result,
                Toast.LENGTH_LONG).show();
    }
}

public String getPostDataString(JSONObject params) throws Exception {

    StringBuilder result = new StringBuilder();
    boolean first = true;

    Iterator<String> itr = params.keys();

    while(itr.hasNext()){

        String key= itr.next();
        Object value = params.get(key);

        if (first)
            first = false;
        else
            result.append("&");

        result.append(URLEncoder.encode(key, "UTF-8"));
        result.append("=");
        result.append(URLEncoder.encode(value.toString(), "UTF-8"));

    }
    return result.toString();
}

PHP

$precio = $_POST['precio']; 
$texto = $_POST['texto']; 
$user = $_POST['user']; 
$l_origen = $_POST['l_origen']; 
$l_destino = $_POST['l_destino'];
$num_pal = $_POST['num_pal']; 

 define('HOST','***');
 define('USER','***');
 define('PASS','***');
 define('DB','***');

 $con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');

 mysql_query("SET NAMES 'utf8'");

 $sql = "INSERT INTO users (username, precio, text_cli, l_origen, l_destino, num_pal) VALUES('$user','$precio','$texto','$l_origen','$l_destino','$num_pal')";

非常感谢您的宝贵时间

【问题讨论】:

  • 尝试从终端用curl发出同样的android请求,也许你能找到问题是在android端还是在php端!

标签: java php android utf-8


【解决方案1】:

PHP/MySQL/UTF-8 中需要考虑的事项

- The database tables and text columns should be set to UTF-8

- HTML page Content-Type should be set to UTF-8

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

- PHP should send a header informing the browser to expect UTF-8

header('Content-Type: text/html; charset=utf-8' );

- The PHP-MySQL connection should be set to UTF-8

mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn);

mysqli_query("SET CHARACTER_SET_RESULTS='utf8'",$conn);

mysqli_query("SET CHARACTER_SET_CONNECTION='utf8'",$conn);

- PHP ini has default_charset setting it should be utf-8 if you do not have access to it use ini_set('default_charset', 'utf-8');

【讨论】:

  • 您好,谢谢您的回答。我都试过了,还是不行
【解决方案2】:

我做了一些研究,发现mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn); 不存在,但mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn); 已被弃用。如果我错了,请纠正我。

相反,我在连接之后和查询数据库之前放置了以下内容:

mysqli_set_charset( $con, 'utf8');

哪个工作正常。所以这里是“完整”的代码:

define('HOST','***');
define('USER','***');
define('PASS','***');
define('DB','***');

$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect');

mysqli_set_charset( $con, 'utf8');

$sql = "INSERT INTO users (username, precio, text_cli, l_origen, l_destino, num_pal) VALUES('$user','$precio','$texto','$l_origen','$l_destino','$num_pal')";

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多