从MySQL输出国际字符到Java / Android

时间:2012-11-15 00:45:42

标签: java android mysql utf-8

让我们说有人使用这封信:ë。他们在EditText Box中输入它并正确地存储在MySQL数据库中(通过php脚本)。但要抓住具有该特殊字符的数据库字段会导致Java / Android中的输出为“null”。

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

3 个答案:

答案 0 :(得分:1)

听起来类似于:android, UTF8 - How do I ensure UTF8 is used for a shared preference

我怀疑通过Web服务和Android App之间的Web界面出现问题。一方是发送UTF-16或ISO 8859-1字符,另一方是将其解释为UTF-8(反之亦然)。确保:

  • 来自Android的网络请求使用的是UTF-8
  • 网络服务使用UTF-8回复。

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

答案 1 :(得分:0)

我建议将数据库访问代码提取到标准Java Env,然后编译并测试它。这有助于您找出问题所在。

即使存在编码问题,通常也不会为空。检查其他问题以及是否抛出其他异常。

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

答案 2 :(得分:0)

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

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