一个webui下中文文件名长度带来的问题

#14
by wizbe - opened

算不上bug,但挺烦的。我有时候输入长中文prompt就出错,查了半天是文件长度的问题。

webui用prompt当文件名保存输出结果,到是省了数据库的麻烦,但带来了另一个麻烦,那就是一个utf8的中文最多能占3个字符,这样稍微长一点的中文prompt就会导致文件超过linux的255字符限制存不下去。外在表现就是跑完了看不到图,以为sd死了,看日志在image.save那行报错。把prompt改短了就行了。比如这个

“dior的托特包,通体饰以由艺术家 Pietro Ruffo 设计的 Rêve d'Infini 图案刺绣,点缀以金色金属光泽线,为经典设计注入梦幻元素,全新演绎 Christian Dior 钟爱的星星符号,可收纳各种日常用品,适合各种重要场合”

这个问题英文不太会出现,出现了也好办,直接substr就行,但中文麻烦,直接用截断字符串不行,python按字算,认为上面一串字符没超过255,得先转换成char还得避免把最后一个字切乱了的情况。网上有个先decode再encode的做法,python2可以,3我没找到办法。最后自己凑合找了字符截断的方法。

还有个简单做法就是把那句保存图片的话try catch包起来,长了就不存了,也行。

可以用个循环,依次减少str的长度,直到对应的byte少于规定字符数
strlen = len(text)
bytelen = len(text.encode('utf-8'))
while bytelen >max_lengh:
text= text[:strlen-1]
strlen = len(text)
bytelen = len(text.encode('utf-8'))

wuxiaojun changed discussion status to closed

Sign up or log in to comment