diff --git a/hgext/phabricator.py b/hgext/phabricator.py --- a/hgext/phabricator.py +++ b/hgext/phabricator.py @@ -239,10 +239,17 @@ Call parameters are read from stdin as a JSON blob. Result will be written to stdout as a JSON blob. """ - params = json.loads(ui.fin.read()) - result = callconduit(repo, name, params) - s = json.dumps(result, sort_keys=True, indent=2, separators=(b',', b': ')) - ui.write(b'%s\n' % s) + # json.(load|dump)s only returns/accepts unicode strings + params = pycompat.rapply(lambda x: + encoding.unitolocal(x) if isinstance(x, pycompat.unicode) else x, + json.loads(ui.fin.read()) + ) + result = pycompat.rapply(lambda x: + encoding.unifromlocal(x) if isinstance(x, bytes) else x, + callconduit(repo, name, params) + ) + s = json.dumps(result, sort_keys=True, indent=2, separators=(u',', u': ')) + ui.write(b'%s\n' % encoding.unitolocal(s)) def getrepophid(repo): """given callsign, return repository PHID or None"""