2 qingyuanluofeng qingyuanluofeng 于 2015.07.16 09:13 提问

django取出pymongo中存储的中文图片路径后,读取该路径在网页上展示没有出现图片

问题是这样的:
我搭建的环境是:python2.7 + mongoengine + pymongo + django + Ubuntu14
python处理一些带有中文路径的图片,把这个路径存储在数据库pymongo中,保存的时候该路径是转换为:utf-8类型存储到数据库中,然后django通过mongoengine来连接pymongo的数据库,从中取出这个图片的路径,
希望向各位朋友们请教一下下面的问题,十分感谢
1遍历这些图片的路径时,采用的是:os.walk()方法,调用如下:
1 def visitDir_walk(path , sFileSuffix):
2 codedetect = chardet.detect(path)["encoding"]
3 path = unicode(path , codedetect).encode("gbk")
4 fileNames = list()
5 for root,dirs,files in os.walk(path):
6 for i in range(0 , len(files)):
7 file = files[i]
8 if file.endswith(sFileSuffix):
9 sFileName = os.path.join(root , file)
10 codedetect = chardet.detect(sRealFileName)["encoding"]
11 sRealFileName = unicode(sRealFileName , "gbk").encode("gbk")
12 fileNames.append( sRealFileName )
13 return fileNames
我发现:如果os.walk中传入的如果是unicode类型的中文路径,遍历报错,这是为什么?
如果在第11行中我改为: sRealFileName = unicode(sRealFileName , "gbk"),也会报错

2经过chardet模块分析之后:该路径变成了unicode类型,而且编码方式为ascii,这一点很奇怪,因为存储的时候:
picture = {}
picture["path"] = unicode(picPath, "gbk").encode("utf-8")
已经将获取的图片路径转换为utf-8的str类型的路径,但是从数据库拿出来却变成了ascii的unicode类型的路径

3取出的这个图片路径在django网页展示时,图片不显示,我猜想很可能是和图片的路径中带有中文有关,但我即使对取出的图片路径unicode类型的路径,转换为utf-8或者gbk,再展示该图片,还是无法显示。我也尝试不对该路径做任何编码转换,图片仍然不显示。

恳请各位朋友们指点一下,回答一下这三个问题,被中文路径折磨了1个月,仍然没有解决这个问题。
在此先提前感谢各位朋友。

3个回答

wangyaninglm
wangyaninglm   Ds   Rxr 2015.07.16 14:13

你的系统环境是什么支持中文编码么?图片不能显示,一般就是路径不对,你先试试改成纯英文的看看能成不,再看是不是中文的问题

qingyuanluofeng
qingyuanluofeng 朋友,您好,我是ubuntu系统,换成纯英文可以显示图片。求指导啊,这个问题折磨我一个多月
2 年多之前 回复
qingyuanluofeng
qingyuanluofeng 朋友,您好,我是ubuntu系统,换成纯英文可以显示图片。求指导啊,这个问题折磨我一个多月
2 年多之前 回复
CSDNXIAON
CSDNXIAON   2015.07.16 15:32

Dictionary存储本地图片_FileInfo读取本地图片路径和名字
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

wangyaninglm
wangyaninglm csdn 何时有机器人的? 不用这些大牛贴链接了?哈哈
2 年多之前 回复
xiluoduyu
xiluoduyu   2015.07.17 18:29

注意下chardet识别编码是有一定前提的,如果你给它的内容太少,它就很可能会识别出错。一个路径能有多少内容啊,识别出错是有可能的。所以你还是try里面试下不同编码格式吧

xiluoduyu
xiluoduyu 回复qingyuanluofeng:路径编码问题你首先需要确定你系统的编码,然后在idle中调试成功了再写到代码里去啦。不懂就认真看下帮助手册,别急着网上到处搜。至于python3,我觉得你不用过于担心兼容问题,除非你用到很大的像Numpy之类的库,一般的都有py3版本,没有的自己看下源码转换成py3的就行。
2 年多之前 回复
qingyuanluofeng
qingyuanluofeng 朋友,您好,这个中文路径问题折磨我一个多月了,希望您能指导我一下。我怕有些程序中的第三方包不支持python3啊
2 年多之前 回复
xiluoduyu
xiluoduyu 还有啊,如果python27不是必须的话,强烈建议你用python3吧,编码问题从此不再有!
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片