首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中将unicode字符串(来自JSON的字符串)编码为'utf-8‘?

如何在python中将unicode字符串(来自JSON的字符串)编码为'utf-8‘?
EN

Stack Overflow用户
提问于 2015-07-28 00:35:50
回答 1查看 4.7K关注 0票数 3

我正在使用Flask-Python创建一个REST API。其中一个urls (/uploads)接受( POST HTTP请求)和一个JSON '{"src":"void","settings":"my settings"}‘。我可以单独提取每个对象,并将其编码为一个字节字符串,然后使用python中的hashlib对其进行哈希处理。然而,我的目标是获取整个字符串,然后进行编码,使其看起来像like...myfile.encode('utf-8')。打印我的文件显示如下{u‘’src‘:u’‘void’,u‘settings’:u‘’my settings'},有没有我可以接受上面的单码字符串,然后编码到utf-8到hashlib.sha1的字节序列(mayflies.encode(‘uff-8’)。一定要让我知道更多的澄清。提前谢谢。

代码语言:javascript
复制
fileSRC = request.json['src']
fileSettings = request.json['settings']

myfile = request.json
print myfile

#hash the filename using sha1 from hashlib library
guid_object = hashlib.sha1(fileSRC.encode('utf-8')) // this works however I want myfile to be encoded not fileSRC
guid = guid_object.hexdigest() //this works 
print guid
EN

回答 1

Stack Overflow用户

发布于 2015-08-21 14:08:27

正如您在评论中所说,您使用以下工具解决了问题:

代码语言:javascript
复制
jsonContent = json.dumps(request.json)
guid_object = hashlib.sha1(jsonContent.encode('utf-8'))

但重要的是要理解为什么这样做是可行的。Flask sends you unicode() for non-ASCII, and str() for ASCII。使用JSON转储结果将为您提供一致的结果,因为它抽象了内部Python表示,就像只有unicode()一样。

Python 2

在Python2(您正在使用的Python版本)中,您不需要.encode('utf-8'),因为json.dumps()ensure_ascii的默认值是True。当您将非ASCII数据发送到json.dumps()时,它将使用JSON转义序列来实际转储ASCII:不需要编码为UTF-8。此外,由于Zen of Python说“显式优于隐式”,即使ensure_ascii已经是True,您也可以指定它:

代码语言:javascript
复制
jsonContent = json.dumps(request.json, ensure_ascii=True)
guid_object = hashlib.sha1(jsonContent)

Python 3

然而,在Python 3中,这将不再起作用。在Python3中,json.dumps()返回unicode,即使unicode字符串中的所有内容都是ASCII码。但hashlib.sha1只能在bytes上运行。您需要显式转换,即使ASCII编码是您所需要的全部:

代码语言:javascript
复制
jsonContent = json.dumps(request.json, ensure_ascii=True)
guid_object = hashlib.sha1(jsonContent.encode('ascii'))

这就是为什么Python3是一种更好的语言:无论是str (Unicode)还是bytes,它都迫使您更加明确地说明所使用的文本。这就避免了以后的许多问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31658603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档