首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >N三元组中的AllegroGraph - UTF-8字符

N三元组中的AllegroGraph - UTF-8字符
EN

Stack Overflow用户
提问于 2012-06-12 03:52:53
回答 2查看 597关注 0票数 0

当我使用Unicode4.6Python API时,我可以使用connection.addTriple()方法尝试添加一个以包含AllegroGraph字符(×)的文字结尾的三元组:

conn.addTriple( ..., ..., '5 × 10**5' )

这不管用。我得到了错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position...

下面是完整的回溯:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/openrdf/repository/repositoryconnection.py", line 357, in addTriple
    self._convert_term_to_mini_term(obj), cxt)
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/openrdf/repository/repositoryconnection.py", line 235, in _convert_term_to_mini_term
    return self._to_ntriples(term)
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/openrdf/repository/repositoryconnection.py", line 367, in _to_ntriples
    else: return term.toNTriples();
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/openrdf/model/literal.py", line 182, in toNTriples
    sb.append(strings.encode_ntriple_string(self.getLabel()))
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/openrdf/util/strings.py", line 52, in encode_ntriple_string
    string = unicode(string)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 18: ordinal not in range(128)

相反,我可以像这样添加三元组:

conn.addTriple( ..., ..., u'5 × 10**5' )

这样我就不会收到错误。

但是,如果我使用connection.addFile(filename, format=RDFFormat.NTRIPLES)加载一个包含一些UTF-8编码字符的三元组文件,则在Notepad++中将该三元组文件另存为ANSI编码时会收到以下错误消息:

代码语言:javascript
复制
400 MALFORMED DATA: N-Triples parser error while parsing
#<http request stream @ #x10046f9ea2> at line 12764 (last character was
#\×): nil
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/openrdf/repository/repositoryconnection.py", line 341, in addFile
    commitEvery=self.add_commit_size)
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/miniclient/repository.py", line 342, in loadFile
    nullRequest(self, "POST", "/statements?" + params, body, contentType=mime)
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/miniclient/request.py", line 198, in nullRequest
    if (status < 200 or status > 204): raise RequestError(status, body)
franz.miniclient.request.RequestError: Server returned 400: N-Triples parser error while parsing

如果文件另存为UTF-8编码,我会收到此错误消息:

代码语言:javascript
复制
400 MALFORMED DATA: N-Triples parser error while parsing
#<http request stream @ #x100486e8b2> at line 1 (last character was
#\): Subjects must be resources (i.e., URIs or blank nodes)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/openrdf/repository/repositoryconnection.py", line 341, in addFile
    commitEvery=self.add_commit_size)
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/miniclient/repository.py", line 342, in loadFile
    nullRequest(self, "POST", "/statements?" + params, body, contentType=mime)
  File "/cygdrive/c/agraph-4.6-client-python/src2/franz/miniclient/request.py", line 198, in nullRequest
    if (status < 200 or status > 204): raise RequestError(status, body)
franz.miniclient.request.RequestError: Server returned 400: N-Triples parser error while parsing

但是,如果在Notepad++中将文件设置为ANSI编码,我就可以粘贴×字符并保存,然后文件就可以正常加载了。或者,如果在粘贴字符后将文件编码更改为UTF-8,则字符将更改为某种奇怪的xD7字符。如果文件设置为UTF8编码,并将×粘贴到其中,则如果将编码更改为ANSI,则×将更改为×

当文件被提供给我时,它的×应该在×应该在的地方,当我试图在AllegroGraph中加载它时,我得到了第一个第400个格式错误的数据错误,它在文件中实际出现字符的行(12764)失败,而不仅仅是在第一行。我假设我在第1行得到第二个400错误数据错误的原因与Notepad++为UTF-8编码文件编写的头文件有关。显然,如果我希望AllegroGraph不会立即出现问题,我必须将文件保存为ANSI,但是必须有某种方法来告诉AllegroGraph将×之类的内容读取为UTF-8字符。

在该文件中,三元组如下所示:

<...some subject URI...> <...some predicate URI...> "5 × 10**5" .

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-12 07:01:11

\xd7×的拉丁文-1编码。

如果你错误地将×解码成cp1252 (通常是Windows的默认编解码器),如果它是用UTF-8编码的,你就会得到×

当您获得显示×的文件时,请尝试将用于显示这些文件的编解码器更改为UTF8。

有关Python中的Unicode的概述,请参阅here。~感谢丹尼思。

正如您从AllegroGraph支持部门了解到的那样:

AllegroGraph可以使用\uXXXX表示法在nTriples中接受unicode字符。或者可以使用RDFXML,它允许您保留unicode字符的原样。

票数 1
EN

Stack Overflow用户

发布于 2012-06-12 04:39:52

使用编解码器模块。

代码语言:javascript
复制
import codecs
f = codecs.open('file.txt','r','utf8')

这将打开强制使用utf8编码的文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10986640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档