##// END OF EJS Templates
pycompat: remove json.loads polyfill for Python 3.5...
Gregory Szorc -
r49815:c3a48dd5 default
parent child Browse files
Show More
@@ -376,47 +376,7 b' def shlexsplit(s, comments=False, posix='
376 iteritems = lambda x: x.items()
376 iteritems = lambda x: x.items()
377 itervalues = lambda x: x.values()
377 itervalues = lambda x: x.values()
378
378
379 # Python 3.5's json.load and json.loads require str. We polyfill its
379 json_loads = json.loads
380 # code for detecting encoding from bytes.
381 if sys.version_info[0:2] < (3, 6):
382
383 def _detect_encoding(b):
384 bstartswith = b.startswith
385 if bstartswith((codecs.BOM_UTF32_BE, codecs.BOM_UTF32_LE)):
386 return 'utf-32'
387 if bstartswith((codecs.BOM_UTF16_BE, codecs.BOM_UTF16_LE)):
388 return 'utf-16'
389 if bstartswith(codecs.BOM_UTF8):
390 return 'utf-8-sig'
391
392 if len(b) >= 4:
393 if not b[0]:
394 # 00 00 -- -- - utf-32-be
395 # 00 XX -- -- - utf-16-be
396 return 'utf-16-be' if b[1] else 'utf-32-be'
397 if not b[1]:
398 # XX 00 00 00 - utf-32-le
399 # XX 00 00 XX - utf-16-le
400 # XX 00 XX -- - utf-16-le
401 return 'utf-16-le' if b[2] or b[3] else 'utf-32-le'
402 elif len(b) == 2:
403 if not b[0]:
404 # 00 XX - utf-16-be
405 return 'utf-16-be'
406 if not b[1]:
407 # XX 00 - utf-16-le
408 return 'utf-16-le'
409 # default
410 return 'utf-8'
411
412 def json_loads(s, *args, **kwargs):
413 if isinstance(s, (bytes, bytearray)):
414 s = s.decode(_detect_encoding(s), 'surrogatepass')
415
416 return json.loads(s, *args, **kwargs)
417
418 else:
419 json_loads = json.loads
420
380
421 isjython = sysplatform.startswith(b'java')
381 isjython = sysplatform.startswith(b'java')
422
382
General Comments 0
You need to be logged in to leave comments. Login now