带有转义序列\u
的Unicode字符串。但是,这仅适用于16位unicode字符串。
那是:
CREATE (a:Person {name : "\u1020"})
将照常工作,但问题在于32位unicode字符串。
例如:
CREATE (a:Person {name : "\U10201020"})
会出错
Invalid input 'U': expected '\', ''', '"', 'b', 'f', 'n', 'r', 't' or Unicode (line 1, column 28)
或使用: - \u
本身
CREATE (a:Person {name : "\u10201020"})
将是非常错误的。
问题是如何在Neo4j中表示32位unicode字符串?
答案 0 :(得分:3)
此时(从 2.2.0-M02 和所有以前的版本开始),Cypher仅支持带有 16位unicode 的\u
字面值。< / p>
Neo4j 2.2.0 GA 版本将包含对 UTF-32 文字的支持,使用大写\Uxxxxxxxx
表单。
答案 1 :(得分:2)
正如Chris Leishman在comment中提到的那样,如果我们把它分成代理对,就有可能。
可以使用非常简单的公式计算代理对。在Python中执行此操作的代码是
H = ((S - 0x10000) // 0x400) + 0xD800;
L = ((S - 0x10000) % 0x400) + 0xDC00;
例如,如果S
为\U00101020
,则H
将成为\udbc4
而L
将成为\udc20
。通过这种方式我们可以转换
CREATE (a:Person {name : "\U100101020"})
到
CREATE (a:Person {name : "\udbc4\udc20"})
将适用于Neo4j。