当前位置: 首页 > 知识库问答 >
问题:

Android、JSon和PHP之间的UTF-8编码问题

王豪
2023-03-14

我编程了一个Android应用程序,它管理要在MySQL数据库中存储和删除的数据(在服务器上)。每当在智能手机上使用特殊字符("ä","ü",...)时,符号转换不良。

日志中,我可以看到“Umlaut”(例如“ä”)正确传输。我还在我的php文件中使用“SET NAMES‘UTF-8’”,请参见此处:

function connect() 
{
    ....

    // Connecting to mysql database
    $con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error());

    mysql_query("SET NAMES 'utf8'");

    // Selecting database
    $db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error());

    return $con;
}

如果我通过Postman启动请求,我可以添加带有特殊字符的单词,例如“TÄST”,json响应如下所示:

{"catId":"35","category":"T\u00c4ST"}

所以单词很好地转换为UTF-8。但是如果我通过智能手机添加一个项目,服务器的响应(检索添加的项目)如下所示:

{"catId":"37","category":"T?ST"}

我在代码中为JSON对象添加参数的位置是(注意,“name”是编辑文本字段的字符串内容):

List<NameValuePair> params = new ArrayList<NameValuePair>();
...
params.add(new BasicNameValuePair("category", catName));

之后发送HTTPRequest:

JSONObject json = jsonParser.makeHttpRequest(url_dest, "POST", params);

如果我打印出参数,“Täst”一词是可见的。。。但不幸的是,我无法检查服务器上到达的是哪个json字符串(因为我对php的了解不好)。那么问题出在哪里呢?在我的android应用程序中还是在服务器上的php文件中?

我必须以任何方式编码传出的json对象吗?

非常感谢你的帮助。

共有2个答案

淳于昊然
2023-03-14

@dafocus,如果您在IDE中将Android应用程序项目设置为UTF-8编码,则应确保应用程序中正确处理UTF-8。它看起来像是某个地方的编码变化。如果整个编码为UTF-8,则可能根本不需要将TÄST转换为T\u00c4ST。PHP过去很难使用字符集。我建议您查看PHP,看看处理程序页面是否导致了这种情况(可能)和/或DB-as@madx刚才所说的情况。

凌琦
2023-03-14

要在Eclipse上调试,我建议您:http://projects.eclipse.org/projects/tools.pdt它很容易配置。

控制DB中的编码;也许VARCHAR默认latin1_swedish_ci不能保存该字符串。

解决这一问题的另一种方法是使用apache共享资源:特别http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html以下函数提供的功能:scape eHtml4和unscape eHtml4

 类似资料:
  • 我在将文本从UTF-8编码转换为UTF-8编码时遇到问题。这里有字节数组, 我正在将其转换为UTF-8字符串并返回字节数组, 据我所知,这是一个3字节的数组。正当但这是我得到的。 这是什么原因?据我所知,在UTF-8 Specials中,2391189组合被称为替换字符。 这也是一个更大问题的一部分。

  • 问题内容: 我目前正在开发一个Android应用程序,该应用程序从提供JSON数据的API中获取其数据。我将JSON数据的项目存储为字符串,这导致出现一些奇怪的字符(例如’Â’)。我知道这与字符集有关,因此我将InputStreamReader设置为“ UTF-8”,但它似乎没有解决问题。 Log.d“行”给出 有任何想法吗? 问题答案: 尝试以下代码片段代码,当我遇到类似问题时该代码对我有帮助:

  • 我想知道是否有人能帮忙,我很难将UTF-8字符发布到SagePay。数据库是MySQL,带有数据库字符集utf8和数据库排序规则utf8_general_ci。数据库连接字符串使用useUnicode=true 所有发布到数据库的数据都存储为UTF-8,所有查询的数据都显示为UTF-8,但当字符串编码如下时: 然后发到SagePay,他们会收到一个来自国际字符所在位置的乱码字符串。如果字符串中不包

  • 问题内容: UTF-8和UTF-16之间的区别?我们为什么需要这些? 问题答案: 我相信Web上有很多关于此的好文章,但这是一个简短的摘要。 UTF-8和UTF-16都是可变长度编码。但是,在UTF-8中,字符可能至少占据8位,而在UTF-16中,字符长度以16位开始。 UTF-8主要优点: 基本ASCII字符(例如数字,不带重音的拉丁字符等)占据一个字节,与US-ASCII表示形式相同。这样,所

  • 本文向大家介绍php页面,mysql数据库转utf-8乱码,utf-8编码问题总结,包括了php页面,mysql数据库转utf-8乱码,utf-8编码问题总结的使用技巧和注意事项,需要的朋友参考一下 示例一: PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header("Content-Type: text/html;charset=utf-8"); 2.PHP文件编码问题 点击编辑

  • 问题内容: 使用UTF-8编码创建字符串时存在不一致的地方。 运行此代码: 在Java 1.8.0_20(及更早版本)上,我们得到结果 在Java 1.7和1.6上,我们得到正确的结果: 您遇到此错误了吗?有没有解决方法? 对于Shift_JIS,JIS_X0212-1990,x-IBM300,x-IBM834,x-IBM942,x-IBM942C,x-JIS0208来说,这种不一致也很明显,但显