0

假设有人使用这个字母:ë。他们将其输入到 EditText 框中,并正确存储在 MySQL 数据库中(通过 php 脚本)。但是要使用该特殊字符来获取该数据库字段会导致 Java/Android 中的输出为“null”。

看来我的数据库已正确设置和存储。但检索是个问题。我必须在 PHP 端解决这个问题还是在 Java/Android 中处理它? 编辑我不相信这与 PHP 方面有任何关系,所以我对 Java 方面更感兴趣。

4

3 回答 3

1

听起来类似于:android, UTF8 - 如何确保 UTF8 用于共享首选项

我怀疑问题发生在 Web 服务和 Android 应用程序之间的 Web 界面上。一方面发送 UTF-16 或 ISO 8859-1 字符,另一方面将其解释为 UTF-8(反之亦然)。确保:

  • 来自 Android 的 Web 请求使用 UTF-8
  • Web 服务使用 UTF-8 进行回复。

与其他答案一样,使用 HTTP 调试代理检查 Android 应用程序和 Web 服务之间发送的字符是否符合您的预期。

于 2013-01-15T01:45:01.463 回答
0

我建议将您的数据库访问代码提取到标准 Java 环境中,然后对其进行编译和测试。这将帮助您隔离问题。

通常即使存在编码问题,您也不会得到 null。检查其他问题以及是否引发其他异常。

如果您确定正确插入了字符串,则绝对不是 PHP 的问题。

于 2012-11-15T00:57:55.080 回答
0

可能混淆了 UTF-8 和 UTF-16 或您可能用于存储这些国际字符的任何其他字符集。在 UTF-16 中,字符 ë 将存储为两个字节,第一个字节为空字节 (0x00)。如果这个双字节被错误地传回为 UTF-8,那么空字节将被视为字符串终止符的结尾;导致输出空值而不是国际字符。

首先,您需要 100% 确保您的国际字符正确存储在数据库中。在网站上的 php 页面中看到正确的结果并不能保证这一点;因为两个错误可以给你一个权利。过去,我经常看到数据库中错误存储的字符在网页或某些系统上仍然正确显示。这看起来没问题,直到您需要从另一个系统访问您的数据库,此时;因为你不能在第二个系统上重复同样的错误,所以一切都变得松散了。

于 2012-11-15T05:54:39.597 回答