有一个包含一些中文字符的json数据。
{
"font_size": "47",
"sentences": [
"你好",
"sample sentence1",
"sample sentence2",
"sample sentence3",
"sample sentence4",
"sample sentence5",
"sample sentence6",
"sample sentence7",
"sample sentence8",
"sample sentence9"
]
}
我创建了一个Flask
应用,并使用它来接收上面的json数据。我使用下面的curl命令发布数据。
curl -X POST \
http://0.0.0.0:5000/ \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Postman-Token: af380f7a-42a8-cfbb-9177-74bb348ce5ed' \
-d '{
"font_size": "47",
"sentences": [
"你好",
"sample sentence1",
"sample sentence2",
"sample sentence3",
"sample sentence4",
"sample sentence5",
"sample sentence6",
"sample sentence7",
"sample sentence8",
"sample sentence9"
]
}'
收到request.data
的json数据后,我将其转换为json,实际上request.data
为str
。
json_data = json.loads(request.data)
然后我想用json_data
格式化字符串。
subtitles.format(**json_data)
我收到了错误。
UnicodeEncodeError:'ascii'编解码器无法编码位置0-1中的字符:序数不在范围内(128)
如何解决?提前谢谢。
subtitles
。
subtitles_file = "{path}/templates/sorry/subtitles.ass".format(path=root_path)
with open(subtitles_file, 'r') as file:
subtitles = file.read()
我正在使用python 2并且发生此错误。但是Python 3可以自动处理这个问题。所以享受Python 3。
答案 0 :(得分:2)
在Python 2中,当您open
和read
文件时,您获得的是常规str
,而不是unicode
。
同时,即使request.data
是str
而不是unicode
,如果其中的任何字符串都是非ASCII,json_data
将包含{{1} }}。
因此,当您执行unicode
时,将使用您的默认编码尝试subtitles.format
每个encode
- 如果您还没有做任何事情,则为ASCII。哪个会给出这个错误。
最简单的解决方法是将unicode
更改为subtitles
。像这样:
unicode
......或:
with open(subtitles_file, 'r') as file:
subtitles = file.read().decode('utf-8')
(我猜你想要UTF-8;如果你的文件是其他编码,那么显然要使用它。)