Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 即使在使用utf-8编码后也会出现ascii码错误_Python_Google App Engine_Encoding_Utf 8 - Fatal编程技术网

Python 即使在使用utf-8编码后也会出现ascii码错误

Python 即使在使用utf-8编码后也会出现ascii码错误,python,google-app-engine,encoding,utf-8,Python,Google App Engine,Encoding,Utf 8,我正在向github的api发布降价信息,并在post请求中发送json数据。我发现我不能写列表,因为这些字符不是ascii的一部分,我查了一下,发现我应该一直编码。我对需要标记的文本进行了编码,api正在工作,但当我尝试创建列表时,仍然会遇到相同的错误 POST方法的代码为: 当我尝试制作列表时,我得到的错误如下: 'ascii' codec can't decode byte 0xe2 in position 55: ordinal not in range(128) 添加完整的回溯:

我正在向github的api发布降价信息,并在post请求中发送json数据。我发现我不能写列表,因为这些字符不是ascii的一部分,我查了一下,发现我应该一直编码。我对需要标记的文本进行了编码,api正在工作,但当我尝试创建列表时,仍然会遇到相同的错误

POST方法的代码为:

当我尝试制作列表时,我得到的错误如下:

'ascii' codec can't decode byte 0xe2 in position 55: ordinal not in range(128)
添加完整的回溯:

Traceback (most recent call last):
    File "/home/bigb/Programming/google_appengine/google/appengine/runtime/wsgi.py", line 266, in Handle
      result = handler(dict(self._environ), self._StartResponse)
    File "/home/bigb/Programming/google_appengine/lib/webapp2-2.3/webapp2.py", line 1519, in __call__
      response = self._internal_error(e)
    File "/home/bigb/Programming/google_appengine/lib/webapp2-2.3/webapp2.py", line 1511, in __call__
      rv = self.handle_exception(request, response, e)
    File "/home/bigb/Programming/google_appengine/lib/webapp2-2.3/webapp2.py", line 1505, in __call__
      rv = self.router.dispatch(request, response)
    File "/home/bigb/Programming/google_appengine/lib/webapp2-2.3/webapp2.py", line 1253, in default_dispatcher
      return route.handler_adapter(request, response)
    File "/home/bigb/Programming/google_appengine/lib/webapp2-2.3/webapp2.py", line 1077, in __call__
      return handler.dispatch()
    File "/home/bigb/Programming/google_appengine/lib/webapp2-2.3/webapp2.py", line 547, in dispatch
      return self.handle_exception(e, self.app.debug)
    File "/home/bigb/Programming/google_appengine/lib/webapp2-2.3/webapp2.py", line 545, in dispatch
      return method(*args, **kwargs)
    File "/home/bigb/Programming/Blog/my-ramblings/blog.py", line 232, in post
      mark_blog = markDown(blog)
    File "/home/bigb/Programming/Blog/my-ramblings/blog.py", line 43, in markDown
      text = to_mark.decode('utf8')
    File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
      return codecs.utf_8_decode(input, errors, True)
  UnicodeEncodeError: 'ascii' codec can't encode characters in position 45-46: ordinal not in range(128)

我是不是理解错了?谢谢

我记不清了,但当我遇到完全相同的错误时,可能在response.read()中使用decode/encode对我有效

response.read().decode("utf8")

您的
to_mark
值不是Unicode值;您已经在那里对字节字符串进行了编码。尝试对字节字符串进行编码告诉Python,在再次编码之前,它应该首先将值解码为Unicode。这会导致您的异常:

>>> '\xc3\xa5'.encode('utf8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

您的代码片段如下所示:

text = to_mark.encode('utf-8')
但在回溯中,您有:

File "/home/bigb/Programming/Blog/my-ramblings/blog.py", line 43, in markDown
    text = to_mark.decode('utf8')

请首先确保发布真实代码并进行回溯(即:发布实际引发异常的代码)。

请包含完整的回溯。请注意,对于不需要编码的
json.dumps()
,库将为您处理编码。这不是问题的原因。您确定
to_mark
是Unicode值吗?
to_mark
是来自文本区域以提交新帖子的值。我使用的是jinja2和autoescape,无论提交什么内容。这并不意味着
to_mark
是一个unicode值。它将是一个字节字符串,由浏览器编码以匹配表单内容类型(通常为UTF8)。您的回溯与您发布的代码无关。您正在将bytestring值存储在Unicode字段中,
subject
mark_blog
或两者都存储。例外情况适用于在某处强制使用的Unicode值;为什么在另一个地方将字节解码为Unicode可以解决这个问题?即使这是一个问题,为什么UTF8会在这里工作?这是一个很大的假设。所以如果我理解正确,字节字符串已经被编码了?undicode是字节字符串的解码版本吗?我刚试过,我还是会犯同样的错误是的,你已经做到了。Python字符串是编码数据;unicode值被解码。类似于包含数字和整数的字符串,或者表示日期和时间与
datetime
对象的字符串。看到了,我真的读了,也读了。对不起,当我根据Martjin的建议将它改为解码时,我没有编辑它。现在编辑。
text = to_mark.encode('utf-8')
File "/home/bigb/Programming/Blog/my-ramblings/blog.py", line 43, in markDown
    text = to_mark.decode('utf8')