neo4j图数据库,py2neo如何处理中文输出乱码问题?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
在调试py2neo
的程序的时候,苏南大叔发现,py2neo
输出带有中文的节点的时候,显示乱码。那么,如何解决这个中文乱码问题呢?需要设置什么呢?是需要像 python2 一样处理,还是需要设置 shebang 行?
大家好,这里是苏南大叔的“程序如此灵动”博客,这里记录苏南大叔和计算机代码的故事。本文记录py2neo
程序中,如何处理节点属性中文乱码的问题。本文测试环境:win10
,neo4j@4.4.5
,python@3.6.8
,py2neo@2021.2.3
。
测试数据
测试代码:
from py2neo import Graph, Node, Relationship,NodeMatcher
graph = Graph('http://localhost:7474',auth=("neo4j","neo4j"))
data = graph.run("match(n) return n").data()
print(data)
from py2neo import Node, Relationship
a = Node('Person', name='苏南')
b = Node('Person', name='Bob')
r = Relationship(a, 'KNOWS', b)
print(a, b, r)
输出结果:
结果显示:py2neo
的代码中,对于数据库中的中文属性,是可以友好输出的。但是对于自己自定义的节点属性中文,是不能完美输出的。(注意\u
开头的字样,其实也不能说是乱码,只不过是编码方式不同罢了)
解决方案
这个结局方案,先找到py2neo
模块的物理位置,可以参考下面这篇文章:
物理位置是:
C:\Users\sunan\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\py2neo
然后,找到下面这个文件的第132行:
<path>/cypher/encoding.py
parts[i] = (X_ESCAPE.sub(u"\\\\u00\\2", parts[i].encode("unicode-escape").decode("utf-8")).
修改为:
parts[i] = (X_ESCAPE.sub(u"\\\\u00\\2", parts[i].encode("unicode-escape").decode("unicode-escape")).
如下是相同代码的运行结果对比:
参考文献
综述
解决中文乱码的问题,似乎是个永恒的话题,隔三岔五就出来一个。不过,这篇文章中的解决方案并不是很完美,修改了py2neo
的源码。大家有更好的办法的话,可以留言给我。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。