前几天对接某第三方支付的时候发生了2个鬼问题,都是些坑 关于 编码 和 时区 的问题
服务器时区导致的问题
第一个问题就是 请求对方的 下单 接口 一直返回 下单超时 的错误信息
找了好久最后发现是测试服务器的时区不对 是 UTC 而对方是东八区的 CST 整整晚了别人8个小时 下单不超时都怪了
UTC
UTC (Universal Time Coordinated) 世界协调时 又称 世界标准时间
是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间
协调世界时是世界上调节时钟和时间的主要时间标准,它与0度经线的平太阳时相差不超过1秒[4],并不遵守夏令时。
协调世界时是最接近格林威治标准时间(GMT)的几个替代时间系统之一。
对于大多数用途来说,UTC时间被认为能与GMT时间互换,但GMT时间已不再被科学界所确定
这套时间系统被应用于许多互联网和万维网的标准中 例如,网络时间协议(NTP, Network Time Protocol)就是协调世界时在互联网中使用的一种方式
表示形式:
如果本地时间比UTC时间快
例如中国大陆[注 1]、香港、澳门、台湾、蒙古国、新加坡、马来西亚、澳大利亚西部的时间比UTC快8小时 就会写作
UTC+8
,俗称 东八区。相反,如果本地时间比UTC时间慢,例如夏威夷的时间比UTC时间慢10小时,就会写作
UTC-10
,俗称西十区
CST
CST的话 可以代表 4个 不同的时区
大中华地区时区,China Standard Time
澳洲中部时间,Central Standard Time (Australia)
北美中部时区,Central Standard Time (North America)
古巴标准时间,Cuba Standard Time,参见北美东部时区
这些都可以记作 CST
讲下中国 因幅员辽阔,依地理事实上可划分为东五区、东六区、东七区、东八区、东九区等5个时区。
中华民国大陆时期依据国际标准,将全国时区划分为昆仑时区、回藏时区(后改称新藏时区)、陇蜀时区、中原时区、以及长白时区。
1949年中华人民共和国成立后,改将中国大陆全境统一划为东八区(UTC+8),同时采用北京时间做为全国唯一的标准时间
所以我们现在都是已北京时间做为标准
中国属于东八区 比 标准时间 UTC 块了8个小时 所以 UTC+8
编码方式导致的问题
第二个问题 支付成功异步通知中的验签老是错误
各种排查没找到问题 也是郁闷了好久 最后看了下日志
发现其中有个订单描述的字段 我传递过去的时候其中有中文描述 现在记录到日志里出现了乱码
最后请求对方协助 对方发送的还真是 GBK
编码 在我本地 UTF-8
变成了乱码 导致验签一直失败
|
|
然后转换了个编码过验签通过了 至此 问题解决!
补了下编码的知识 感觉又要掉进去海里去了 非常多的内容
ASCII码
ASCII码是美国定义的一套用于 英语字符 和 二进制位 之间的关系的一种标准 包含了 128个字符
Unicode码
一开始的编码是很乱的 每个国家都有自己的编码形式 后来为了统一 出现了 Unicode 编码 他是一个很大的集合 包含了 所有的字符编码
更多的可以看这里http://www.unicode.org/
UTF-8编码
UTF-8 是 Unicode 编码 的实现方式之一
它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度
GBK编码
GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。
GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。
GBK包含全部中文字符,是国家编码,通用性比UTF8差
编码之间的转换
各编码中间的转换基本都是 通过 Unicode 编码才能相互转换
内容好多 我自己也看的有点迷糊了!!!
致谢
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
https://zh.wikipedia.org/wiki/%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81