gpt4 book ai didi

flask - Werkzeug 测试客户端和 utf-8

转载 作者:行者123 更新时间:2023-12-03 16:12:43 24 4
gpt4 key购买 nike

这是代码。当我发送这两个字段时都失败了。

import unittest

class UnicodeTestCase(unittest.TestCase):
def test_unicode(self):
from cStringIO import StringIO
from flask import Flask, request

app = Flask(__name__)
app.config['TESTING'] = True

@app.route('/', methods=["POST"])
def test_view():
print request.values, request.files
return "OK"

file = (StringIO("0" * 1000), "filename.txt")
string = u"∆_∆"

client = app.test_client(use_cookies=False)
self.assertEquals(200, client.post('/', data={'file': file}).status_code)
self.assertEquals(200, client.post('/', data={'string': string}).status_code)
self.assertEquals(200, client.post('/', data={'file': file, 'string': string}).status_code)

在最后一个断言上它失败了:

Error
Traceback (most recent call last):
File "/Users/user1/tests/test_uni.py", line 108, in test_unicode
self.assertEquals(200, client.post('/', data={'file': file, 'string': string}).status_code)
File "/Users/user1/.virtualenvs/test/lib/python2.7/site-packages/werkzeug/test.py", line 771, in post
return self.open(*args, **kw)
File "/Users/user1/.virtualenvs/test/lib/python2.7/site-packages/flask/testing.py", line 108, in open
follow_redirects=follow_redirects)
File "/Users/user1/.virtualenvs/test/lib/python2.7/site-packages/werkzeug/test.py", line 725, in open
environ = args[0].get_environ()
File "/Users/user1/.virtualenvs/test/lib/python2.7/site-packages/werkzeug/test.py", line 535, in get_environ
stream_encode_multipart(values, charset=self.charset)
File "/Users/user1/.virtualenvs/test/lib/python2.7/site-packages/werkzeug/test.py", line 104, in stream_encode_multipart
write('\r\n\r\n' + value)
File "/Users/user1/.virtualenvs/test/lib/python2.7/site-packages/werkzeug/test.py", line 71, in write
write_binary(string.encode(charset))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 4: ordinal not in range(128)

当我使用 Postman(Google Chrome 扩展程序)发送这两个字段时,它工作正常。

可以吗?我应该用 unicode 和 base64 或其他东西包装字段吗?还是 werkzeug 测试客户端中的错误?

最佳答案

看起来像测试客户端错误,当直接请求工作正常时,我已经有测试客户端的另一个错误,但测试客户端有意外结果。

对我来说 https://github.com/mitsuhiko/werkzeug/blob/master/werkzeug/test.py#L71我将 string 类型设置为 str。仅对于字符串不调用此方法,对于文件仅此方法不调用您的字符串。您可以尝试使用 next 临时更新此方法,仅适用于 python 2:

def write(string):
if isinstance(string, str):
write_binary(string)
else:
write_binary(string.encode(charset))

我为您的示例创建了错误:https://github.com/mitsuhiko/flask/issues/973 .

关于flask - Werkzeug 测试客户端和 utf-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21584413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com