【问题标题】:UTF-8 encoding problems between Android, JSon and PHPAndroid、JSON 和 PHP 之间的 UTF-8 编码问题
【发布时间】:2014-01-12 18:04:54
【问题描述】:

我编写了一个 Android 应用程序,该应用程序管理要在 MySQL 数据库(在服务器上)中存储和删除的数据。每当在智能手机上使用特殊字符(“ä”、“ü”、...)时,符号都会被错误地转换。

在日志中,我可以看到“元音变音”(例如“ä”)已正确传输。我还在我的 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 对象添加参数的位置是(注意“名称”是编辑文本字段的字符串内容):

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 对象进行编码吗?

非常感谢您的帮助。

【问题讨论】:

    标签: java php android json utf-8


    【解决方案1】:

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

    控制数据库中的编码;也许 VARCHAR 默认 latin1_swedish_ci 无法保存该字符串。

    解决它的另一种方法可能是查看 apache commons: http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html 特别是提供的功能:escapeHtml4 和 unescapeHtml4

    【讨论】:

    • 非常感谢您的提示!但不幸的是,我的 php 文件正在远程服务器(bplaced.net)上运行,是否也可以在那里调试?我对此一无所知。
    • 是的,但它有点复杂。您应该远程安装 xdebug 并使用 Eclipse PDT。我认为这是一个很好的指南:bogdan-albei.blogspot.it/2010/06/…
    【解决方案2】:

    @dafocus,如果您在 IDE 中将您的 Android 应用项目设置为 UTF-8 编码,它应该确保在应用中正确处理 UTF-8。它看起来像是某处的编码更改。如果编码始终为 UTF-8,您可能根本不需要将 TÄST 转换为 T\u00c4ST。 PHP 过去很难处理字符集。我建议您查看 PHP 以确定处理程序页面是否导致此(可能)和/或 DB - 正如@madx 刚才所说的那样。

    【讨论】:

      猜你喜欢
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多