Github JSON API Blob二进制数据作为Base64编码的字符串

时间:2014-02-15 21:47:17

标签: json encoding github-api

当我向Github API发出此请求时

curl -H "Accept: application/vnd.github.v3.raw" \
  https://api.github.com/repos/STRd6/SurfN-2-Sur5/git/blobs/cf0167baab25ea841834fee66167ca33af28a7bf

我收到:

鐎G

IHDR ٳ⿀bKGD̿   pHYsHHFɫ>   vpAg  纜퀀剄ATHǭきఈEaᙜ扊ᦒă彾
4Gᦇ߸�SDԱSЍ:詎⮢⍯5Ɏ搩Ta2ك2xқ?⳷ṵࡓ瑛躒ቬ쐼뀛է鑳ԷWꇎsો:F坠ꀣ%tEXtdate:create2011-08-20T14:56:12-07:00ራ뀀%tEXtdate:modify2011-08-20T14:56:12-07:00ՓIEND 

当我希望收到更多类似的内容时:

�PNG

IHDR szz�IDATXGU�Y���������c����.aQ$�(��<E�1��?

我认为这是由于Github API错误地将二进制数据编码为UTF-8而不是ISO-8859-1。

当数据通过github API进行Base64编码时,甚至会出现问题:

♥ curl -H "Content-Type: application/json"  https://api.github.com/repos/STRd6/SurfN-2-Sur5/git/blobs/cf0167baab25ea841834fee66167ca33af28a7bf
{
  "sha": "cf0167baab25ea841834fee66167ca33af28a7bf",
  "size": 358,
  "url": "https://api.github.com/repos/STRd6/SurfN-2-Sur5/git/blobs/cf0167baab25ea841834fee66167ca33af28a7bf",
  "content": "6ZCORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZs+K/gAAAAmJLR0QA74eP\nzL8AAAAJcEhZcwAAAEgAAABIAEbJqz4AAAAJdnBBZwAAACAAAAAgAOe6nO2A\ngADliYRBVEjHreOBjeCwiEXvhpkZYRzhmZwFD+aJiuGmksSD75KL5b2+Csmg\nCDRHBeGmh+6rhN+477+97qyQUxxE1LFT0I066KmO7pOw4q6i4o2vNcmO7rSq\n5pCpVAZhAzLZgzJ40ps/4rO34bm1EuChk+eRm+i6kuGJrOyQvAfrgJvVp+mR\nsx3Ut1fqh45z4KuLOgBG5Z2gEOqAowAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAx\nMS0wOC0yMFQxNDo1NjoxMi0wNzowMOGIq+uAgAAldEVYdGRhdGU6bW9kaWZ5\nADIwMTEtMDgtMjBUMTQ6NTY6MTItMDc6MDDVkwcAAAAASUVORO6CoOKAgA==\n",
  "encoding": "base64"
}

请注意,PNG数据以6ZCORw0KGgoA...开头,而不是通常的iVBORw0KGg...,当PNG为Base64编码时会显示。

我想知道的是有一些方法可以指定数据是二进制的,应该这样读出来吗?

2 个答案:

答案 0 :(得分:0)

当你通过API将blob的编码上传到github时,看起来你的blob编码被错误地设置为UTF-8。

要解决此问题,请确保在上传blob时选择正确的编码,Github API将正确返回它们。

答案 1 :(得分:-2)

回答你的问题(复制如下):

  

我想知道的是有一些方法可以指定数据是二进制的,应该这样读出来吗?

答案是肯定的。解决方案是in the documentation

您需要发送以下标题:

Accept: application/vnd.github.VERSION.raw

其中VERSION是您希望与之交互的GitHub API的版本。