2010-01-10 84 views
1

问题...我想通过_bulk_docs API向CouchDB添加数据。大多数情况下,我有这个工作,但任何包含特殊字符(例如,我的数据中存在某些西班牙语或法语字符)的JSON值都会导致CouchDB发出“无效的JSON”错误,并且数据将被拒绝。CouchDB和特殊字符

我不知道我需要设置什么才能使其工作。有什么建议么? CouchDB似乎正确地获取数据(至少在其日志文件中看起来是正确的),但除非删除特殊字符,否则它不会被处理。

+0

CouchDB支持Unicode字符,所以应该没有特殊字符的问题。您使用什么库/工具与CouchDB交谈?问题可能在那里。 – filippo 2010-01-10 19:56:13

+0

现在我正在从Java servlet调用URL。我创建一个指向我的CouchDB数据库的URL对象,并将我的HttpURLConnection的Content-type设置为“text/plain; charset = utf-8”。我还使用Jackson(使用writeValueAsString()方法)创建发送到CouchDB的JSON字符串。 – nkp 2010-01-10 20:51:31

回答

0

内容类型应该是application/JSON,没有测试/普通

我不熟悉你的JSON解析器,但要确保它是UTF-8,只是因为你的HTTP客户端库设置为UTF-8并不意味着你的json序列化器正在输出unicode。

0

我会尝试调试问题做这样的事情:

  1. 安装在计算机上能够理解HTTP数据包嗅探器(如wireshark),并启动它捕获发送到端口5984
  2. 包创建使用curl命令行文件:

    卷曲-X POST [email protected] http://localhost:6984/testdb/_bulk_docs

    其中test.js包含一些做与特殊字符的cuments。看看这是否按预期工作。

  3. 对java库进行相同的操作,并在两种情况下查看http头和请求体的差异。

注意:默认情况下curl应该发送数据与内容类型:application/x-www-form-urlencoded,这可能是问题,但检查标题,因为我不确定。

希望这可以帮助你。

+0

谢谢!这一切都非常有用......它现在正在工作。来自Jetty/Cometd,CouchDB和Jackson的基于JQuery的客户端Web应用程序都在讨论:) – nkp 2010-01-14 17:49:30