我在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
答案 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 a9
是0a
或new-line
:
line-feed
因此,我认为问题是$ echo 'é' > file
$ cat file
é
$ hd file
00000000 c3 a9 0a |...|
00000003
字符使用é
的一个字节而不是0xe9
的两个字节进行编码。
我玩Go以查看0xc3 0xa9
的来源,我注意到e9
的Unicode实际上是é
,它对应\u00e9
的两个字节} {ie \xc3\xa9
和0xc3
,如下所示。因此,在Windows机器上,Unicode与十六进制字节混合在一起。
答案 1 :(得分:0)
这似乎是'é'的编码错误。他们的名字中有2个带有'é'的文件。将其更改为'e'后,推送命令工作。该应用程序不起作用,但这是另一天的故事......