【问题标题】:Combination of Specific special character causes Error特定特殊字符的组合导致错误
【发布时间】:2013-03-04 08:54:55
【问题描述】:

当我以 JSON 格式发送 TextEdit 数据和 "; 的组合时,应用程序每次都会失败。 详细来说,如果我输入的用户名不是密码,而是";,则生成的 JSON 文件如下所示:-

{"UserName":"qa@1.com","Password":"\";"}

我已经搜索了很多,我可以理解的是结果 JSON 数据破坏了导致抛出默认异常的语法。我试图通过使用URLEncoder.encode() 方法摆脱特殊符号。但现在问题在于解码。 任何步骤的任何帮助都将非常感激。

Logcat:

I/SW_HttpClient(448): sending post: {"UserName":"qa@1.com","Password":"\";"}
I/SW_HttpClient(448): HTTPResponse received in [2326ms]
I/SW_HttpClient(448): stream returned: <!DOCTYPE html PUBLIC ---- AN HTML PAGE.... A DEFAULT HANDLER>

【问题讨论】:

  • “应用程序失败”并没有给我们太多信息。 究竟会发生什么,在哪里,使用什么代码?
  • 如果失败,那么您有一个好消息,以 Logcat 的形式在这里分享
  • 正是——它正在抛出由我的默认异常处理程序处理的未捕获异常。
  • 只有当我的密码字段包含双引号后跟分号时才会出现问题。对于双引号,会自动插入转义字符,但我听说 java 没有任何分号转义字符。
  • 所以 JSON 构建器会出现问题,或者当您将其传递给 HTTP 时,问题开始了?

标签: java android json


【解决方案1】:

你好试试下面的代码

String EMPLOYEE_SERVICE_URI = Utils.authenticate+"?UserName="+uid+"&Email="+eid+"&Password="+URLEncoder.encode(pwd,"UTF-8");

【讨论】:

  • 对不起,但我已经提到我已经尝试过 URLEncoder.encode() 方法。它将 "; 转换为 %22%3B,我不知道如何解码。
  • 我真的不明白这个答案是如何相关的。问题在于 JSON 而不是 URL
【解决方案2】:

您在问题中提供的 JSON 是有效的。

JSON 规范要求字符串中的双引号用反斜杠转义。在此处阅读语法图 - http://www.json.org/

如果在解析该 JSON 时出现异常,则说明解析器有问题或异常意味着其他原因。


我搜索了很多,我能理解的是生成的 JSON 数据违反了语法

你的理解不正确。

我尝试使用 URLEncoder.encode() 方法去除特殊符号。

这是一个错误,只会让事情变得更糟:

  1. 应该有反斜杠。
  2. 服务器或任何处理 JSON 的设备不会期望从完全不同的标准随机转义。

但现在问题在于解码。

没错。

【讨论】:

  • 反斜杠不是分号的转义字符...至少在 java 中没有。
【解决方案3】:

以下提供的 JSON 可以使用以下代码通过 GSON 库进行解析

private String sampledata = "{\"UserName\":\"qa@1.com\",\"Password\":\"\\\";\"}";

Gson g = new Gson();
g.fromJson(sampledata, sample.class);



public class sample {

    public String UserName;
    public String Password;
}

【讨论】:

    【解决方案4】:

    为了解码文本,我得到了解决方案..

     URLDecoder.decode(String, String);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      相关资源
      最近更新 更多