Android与php:将utf-8字符串保存到MySQL

Android与php:将utf-8字符串保存到MySQL,php,android,utf-8,json,Php,Android,Utf 8,Json,我知道我在问一个以前被问过很多次的问题,但我觉得我需要澄清我的问题 我有一个Android应用程序,它向PHP脚本发送一个JSON编码的字符串。然后,以下代码将数据保存为完整的JSON字符串。(还有其他函数可以将数据正确地保存到多个字段,而不仅仅是一个JSON字符串) 问题是JSON字符串中包含的一些文本取自Android中的strings.xml,该字符串以utf-8编码。例如,strings.xml文件不能到达那里在MySQL中保存为“Canu0027t到达那里”。此外,“批发和零售”另存为

我知道我在问一个以前被问过很多次的问题,但我觉得我需要澄清我的问题

我有一个Android应用程序,它向PHP脚本发送一个JSON编码的字符串。然后,以下代码将数据保存为完整的JSON字符串。(还有其他函数可以将数据正确地保存到多个字段,而不仅仅是一个JSON字符串)

问题是JSON字符串中包含的一些文本取自Android中的strings.xml,该字符串以utf-8编码。例如,strings.xml文件
不能到达那里
在MySQL中保存为“Canu0027t到达那里”。此外,“批发和零售”另存为“批发u0026零售”

由于json字符串中的非utf-8编码字符,我在php中的
json\u decode()
也失败了。出现以下错误:格式错误的UTF-8字符,可能编码不正确


我如何处理所有这些情况?请提供帮助。

您是否设置了帖子的编码

    List<NameValuePair> params = ...;
    HttpPost httppost = new HttpPost(hostname);
    httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
列表参数=。。。;
HttpPost HttpPost=新的HttpPost(主机名);
setEntity(新的UrlEncodedFormEntity(参数,“UTF-8”);

一般来说,现在所有的字符串都应该是UTF-8,因为它允许轻松的国际化。您应该设置MySQL数据库,使字符串字段存储为UTF-8(
utf8\u general\u ci
),并且不会出现转换问题


如果您坚持在数据库中使用另一种编码,您可能需要检查
mb\u check\u编码($string,'UTF-8')
mb\u convert\u编码($string,'ISO-8859-1,'UTF-8')

您还必须在查询中检查
mysql\u real\u escape\u string()
您的
$json\u complete
,否则您将丢失原始的
/uxxx
编码

$json_complete = $_POST['questionnaire'];
$q = json_decode($json_complete, true);

//save complete json string to database
$query_upload = "INSERT INTO questions_json (q_id, json) VALUES('".mysql_real_escape_string($q[qID])."', '".mysql_real_escape_string($json_complete)."') ON DUPLICATE KEY UPDATE json = VALUES(json)";
$result = mysql_query($query_upload) or errorReport("Error in query: $query_upload. ".mysql_error());
if (!$result)
    errorReport($result);

为什么json_decode()在php中失败???您是否得到了错误的字符串或出现了错误消息?即使您保存了Canu0027t get there,您也会使用var a=“Canu0027t get there”来显示此消息;及警觉(一);;你会看到:你到不了那里吗?我试过了,但没什么不同。仍然得到“it's”另存为“itu0027s”将我的MySQL更改为utf8\u general\u ci,但没有任何区别。还尝试了mb_check_编码和mb_convert_编码,但也没有区别。仍然可以将“it's”保存为“itu0027s”,这很奇怪。因此,解码后的json包含额外的字符,因为php无法正确解码utf-8 json,所以有哪些字符?或者,您可能需要更改从xml读取这些字符串并将其嵌入json的方式。
$json_complete = $_POST['questionnaire'];
$q = json_decode($json_complete, true);

//save complete json string to database
$query_upload = "INSERT INTO questions_json (q_id, json) VALUES('".mysql_real_escape_string($q[qID])."', '".mysql_real_escape_string($json_complete)."') ON DUPLICATE KEY UPDATE json = VALUES(json)";
$result = mysql_query($query_upload) or errorReport("Error in query: $query_upload. ".mysql_error());
if (!$result)
    errorReport($result);