Logo

看不见的字符

工具

加载中...

加载中...

问题:

以上是在postman,同样的参数,但是请求结果却截然不同。

分析:

http status code 400 通常是由于前端提交数据的字段名称或者是数据类型和后端不一致,服务器无法处理该请求。

从代码检查每一个字符都无问题,数据的类型和格式都一致,为什么会出现两个截然不同的结果?难道这是薛定谔的代码?

于是乎将每个空白字符删除,得出的参数再次请求,发现这回没有再报错了。难道是空白字符影响了传参的格式,于是再次手动添加空格,发现并无报错。

结论:

在微信复制过程中可能存在某些“看不见的字符”,导致格式无法正确解析,最终导致http status code 400的错误。所以复制代码还是以文件的形式比较好。

罪魁祸首:隐藏字符与编码

问题的核心几乎可以肯定出在参数中不可见或非标准字符上,即使它们看起来只是普通的空格。原因如下:

  1. 不同的空白字符: “空格”并非只有一种。Unicode 中存在多种空白字符(例如,标准空格 U+0020、不间断空格 U+00A0、各种窄空格等等)。虽然它们看起来都像一个空格,但它们是不同的字符,具有不同的字节表示。

  2. 字符编码问题: 当你复制和粘贴文本时,特别是从不同的来源(如文本编辑器、浏览器或其他应用程序),字符编码可能会出现问题。

  3. 不可见的控制字符: 这种情况较少见,但也可能发生,即你意外复制了不可见的控制字符(例如 U+0000 NULL、U+0001 START OF HEADER 等)。这些字符不用于显示,但会深刻影响字符串的解析方式。

为什么删除后重新添加就奏效了

当你手动删除每个“空白字符”时,你实际上移除了所有非标准或有问题的不可见字符。

如何避免此类问题

为了将来避免这种情况,尤其是在处理来自外部源的参数时,可以尝试以下方法:

  • 留意来源: 如果你从网页、PDF 或富文本文件中复制参数,请格外小心,因为这些来源容易引入非标准字符。

  • 检查器: 查看原始请求: 在请求详情中,你会找到一个选项(有时是 "Raw Request"、"Request Headers" 或 "Request Body" 部分)。Postman Console 会显示请求的详细信息,包括原始的 HTTP 请求头和请求体。或者查看网络抓包工具 (如 Wireshark),以查看实际发送到服务器的数据。