回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>当我使用Allegrograph4.6PythonAPI时,我可以使用连接.addTriple()方法尝试添加以包含unicode字符(×)结尾的三元组:</p>
<p><code>conn.addTriple( ..., ..., '5 × 10**5' )</code></p>
<p>这不管用。我得到了一个错误:</p>
<p><code>UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position...</code></p>
<p>以下是完整的回溯:</p>
<pre><code>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.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(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)
</code></pre>
<p>相反,我可以这样添加三元组:</p>
<p><code>conn.addTriple( ..., ..., u'5 × 10**5' )</code></p>
<p>这样我就不会出错了。在</p>
<p>但是如果我使用<code>connection.addFile(filename, format=RDFFormat.NTRIPLES)</code>加载包含一些UTF-8编码字符的ntriples文件,如果ntriples文件从Notepad++另存为ANSI编码,则会收到以下错误消息:</p>
^{pr2}$
<p>如果文件保存为UTF-8编码,则会收到以下错误消息:</p>
<pre><code>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
</code></pre>
<p>但是,如果文件在记事本++中设置为ANSI编码,我可以进入并粘贴<code>×</code>字符,保存,然后文件加载良好。或者,如果在粘贴字符后将文件编码更改为UTF-8,则字符将更改为某种奇怪的xD7字符。如果文件被设置为UTF-8编码,并且我将<code>×</code>粘贴在那里,那么如果我将编码更改为ANSI,<code>×</code>将更改为<code>×</code>。在</p>
<p>当这个文件给我时,它有<code>×</code>应该在<code>×</code>的地方,当我试图在AllegroGraph中加载它时,我得到了第一个400个格式错误的数据错误,它在文件中实际出现的行(12764)失败,而不是仅仅在第一行。我假设第1行出现第二个400个格式错误的原因与Notepad++为UTF-8编码文件编写的头有关。所以很明显,如果我不想让AllegroGraph立即中断,我必须将一个文件保存为ANSI,但是必须有某种方法告诉AllegroGraph将<code>×</code>读为UTF-8字符。在</p>
<p>在文件中,三元组看起来像:</p>
<p><code><...some subject URI...> <...some predicate URI...> "5 × 10**5" .</code></p>