Neo4j中的32位Unicode字符串

时间:2014-12-29 19:45:31

标签: neo4j cypher

带有转义序列\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字符串?

2 个答案:

答案 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将成为\udbc4L将成为\udc20。通过这种方式我们可以转换

CREATE (a:Person {name : "\U100101020"})

CREATE (a:Person {name : "\udbc4\udc20"})

将适用于Neo4j。