推送到CouchDB时出现Unicodedecode错误:' utf8'编解码器无法解码字节0xe9

时间:2018-04-13 16:24:15

标签: encoding couchdb couchapp

我在windows上使用couchdb和couchapp。 我正在研究教授https://github.com/Hypertopic/Tire-a-part正在进行的项目。我目前正在尝试在我的计算机上设置应用程序。

当我这样做时:

couchapp push http://127.0.0.1:5984/tire-a-part

我收到错误:

Traceback (most recent call last):
File "couchapp\dispatch.pyc", line 48, in dispatch
File "couchapp\dispatch.pyc", line 92, in _dispatch
File "couchapp\commands.pyc", line 79, in push
File "couchapp\localdoc.pyc", line 123, in push
File "couchapp\client.pyc", line 294, in save_doc
File "json\__init__.pyc", line 231, in dumps
File "json\encoder.pyc", line 201, in encode
File "json\encoder.pyc", line 264, in iterencode
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 1: 
invalid continuation byte

我的教授和我的朋友都有mac并且没有这个问题。 在网上尝试搜索类似问题几个小时后,我明白这是一个编码错误,但我不明白什么是没有正确编码的,我该怎么办。 感谢

编辑:我发现了couchapp的调试选项。它提供了更多细节,但我仍然不太懂,因为这是我第一次使用couchapp和couchdb。这是调试的最后一部分,因为我认为开始很重要:

2018-04-14 12:42:16 [DEBUG] push spec/samples/scopus.bib
2018-04-14 12:42:16 [DEBUG] push spec/spec_helper.rb
2018-04-14 12:42:16 [DEBUG] Resource uri: http://127.0.0.1:5984/tire-a-part
2018-04-14 12:42:16 [DEBUG] Request: GET _design/Tire-a-part
2018-04-14 12:42:16 [DEBUG] Headers: {'Accept': 'application/json', 'User- 
Agent': 'couchapp/0.7.5'}
2018-04-14 12:42:16 [DEBUG] Params: {}
2018-04-14 12:42:16 [DEBUG] Start to perform request: GET 127.0.0.1:5984 
/tire-a-part/_design/Tire-a-part
2018-04-14 12:42:16 [DEBUG] Send headers: ['GET /tire-a-part/_design/Tire-a- 
part HTTP/1.1\r\n', 'Host: 127.0.0.1:5984\r\n', 'User-Agent: 
restkit/3.0.4\r\n', 'Accept-Encoding: identity\r\n', 'Accept: 
application/json\r\n']
2018-04-14 12:42:16 [DEBUG] Start to parse response
2018-04-14 12:42:16 [DEBUG] Got response: 404 Object Not Found
2018-04-14 12:42:16 [DEBUG] headers: [MultiDict([('X-CouchDB-Body- 
Time','0'),('X-Couch-Request-ID', '5ab9eee6cb'), ('Server', 'CouchDB/2.1.1 
(Erlang OTP/18)'), ('Date', 'Sat, 14 Apr 2018 10:42:16 GMT'), ('Content- 
Type','application/json'), ('Content-Length', '41'), ('Cache-Control', 
'must-revalidate')])]
2018-04-14 12:42:16 [DEBUG] return response class
2018-04-14 12:42:16 [DEBUG] release connection
2018-04-14 12:42:16 [DEBUG] C:\Users\jules\Desktop\LO10 projet\Tire-a- 
part\vendor don't exist
2018-04-14 12:42:16 [CRITICAL] 'utf8' codec can't decode byte 0xe9 in 
position 
1: invalid continuation byte

我将这与我朋友在mac上得到的结果进行了比较,除了[CRITICAL]之外,它完全相同。在' vendordon存在之后' couchapp把_design / Tire-a-part

2 个答案:

答案 0 :(得分:0)

我没有答案,但我尝试了一些东西:我启动了一个Python3.5命令行,并声明了一个变量byte='\xe9',然后用print(byte)打印变量。如下所示,0xe9字节看起来像é字符:

$ python3.5
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> byte='\xe9'
>>> print(byte)
é
>>> 

我不确定为什么Windows有é字符有问题,但macOS工作正常。

在Linux shell命令行上,当我将é字符放入文件并对文件进行十六进制转储时,我发现é字符实际上等于{{1注意c3 a90anew-line

line-feed

因此,我认为问题是$ echo 'é' > file $ cat file é $ hd file 00000000 c3 a9 0a |...| 00000003 字符使用é的一个字节而不是0xe9的两个字节进行编码。

我玩Go以查看0xc3 0xa9的来源,我注意到e9的Unicode实际上是é,它对应\u00e9的两个字节} {ie \xc3\xa90xc3,如下所示。因此,在Windows机器上,Unicode与十六进制字节混合在一起。

enter image description here

答案 1 :(得分:0)

这似乎是'é'的编码错误。他们的名字中有2个带有'é'的文件。将其更改为'e'后,推送命令工作。该应用程序不起作用,但这是另一天的故事......