国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python如何解決secure_filename對(duì)中文不支持問(wèn)題

瀏覽:103日期:2022-06-15 08:21:20
目錄一、最近使用secure_filename發(fā)現(xiàn)的問(wèn)題二、后面找到了原因三、解決方案四、效果展示

前言:最近使用到了secure_filename,然后悲劇的發(fā)現(xiàn)中文居然不展示出來(lái),于是我慢慢的debug,終于找到問(wèn)題了。

一、最近使用secure_filename發(fā)現(xiàn)的問(wèn)題

文件名是中文版的,悲劇的是中文以及其他特殊字符會(huì)被省略。

Python如何解決secure_filename對(duì)中文不支持問(wèn)題

二、后面找到了原因

原來(lái)secure_filename()函數(shù)只返回ASCII字符,非ASCII字符會(huì)被過(guò)濾掉。

三、解決方案

找到secure_filename(filename)函數(shù),修改它的源代碼。

secure_filename(filename)函數(shù)源代碼:def secure_filename(filename: str) -> str: r'''Pass it a filename and it will return a secure version of it. This filename can then safely be stored on a regular file system and passed to :func:`os.path.join`. The filename returned is an ASCII only string for maximum portability. On windows systems the function also makes sure that the file is not named after one of the special device files. >>> secure_filename('My cool movie.mov') ’My_cool_movie.mov’ >>> secure_filename('../../../etc/passwd') ’etc_passwd’ >>> secure_filename(’i contain cool xfcmlxe4uts.txt’) ’i_contain_cool_umlauts.txt’ The function might return an empty filename. It’s your responsibility to ensure that the filename is unique and that you abort or generate a random filename if the function returned an empty one. .. versionadded:: 0.5 :param filename: the filename to secure ''' filename = unicodedata.normalize('NFKD', filename) filename = filename.encode('ascii', 'ignore').decode('ascii') for sep in os.path.sep, os.path.altsep:if sep: filename = filename.replace(sep, ' ') filename = str(_filename_ascii_strip_re.sub('', '_'.join(filename.split()))).strip('._' ) # on nt a couple of special files are present in each folder. We # have to ensure that the target file is not such a filename. In # this case we prepend an underline if (os.name == 'nt'and filenameand filename.split('.')[0].upper() in _windows_device_files ):filename = f'_{filename}' return filename

secure_filename(filename)函數(shù)修改后的代碼:

def secure_filename(filename: str) -> str: r'''Pass it a filename and it will return a secure version of it. This filename can then safely be stored on a regular file system and passed to :func:`os.path.join`. The filename returned is an ASCII only string for maximum portability. On windows systems the function also makes sure that the file is not named after one of the special device files. >>> secure_filename('My cool movie.mov') ’My_cool_movie.mov’ >>> secure_filename('../../../etc/passwd') ’etc_passwd’ >>> secure_filename(’i contain cool xfcmlxe4uts.txt’) ’i_contain_cool_umlauts.txt’ The function might return an empty filename. It’s your responsibility to ensure that the filename is unique and that you abort or generate a random filename if the function returned an empty one. .. versionadded:: 0.5 :param filename: the filename to secure ''' filename = unicodedata.normalize('NFKD', filename) filename = filename.encode('utf8', 'ignore').decode('utf8') # 編碼格式改變 for sep in os.path.sep, os.path.altsep:if sep: filename = filename.replace(sep, ' ') _filename_ascii_add_strip_re = re.compile(r’[^A-Za-z0-9_u4E00-u9FBFu3040-u30FFu31F0-u31FF.-]’) filename = str(_filename_ascii_add_strip_re.sub(’’, ’_’.join(filename.split()))).strip(’._’) # 添加新規(guī)則 # on nt a couple of special files are present in each folder. We # have to ensure that the target file is not such a filename. In # this case we prepend an underline if (os.name == 'nt'and filenameand filename.split('.')[0].upper() in _windows_device_files ):filename = f'_{filename}' return filename四、效果展示

我們很清楚的看到了效果,目前是支持中文的

Python如何解決secure_filename對(duì)中文不支持問(wèn)題

到此這篇關(guān)于Python如何解決secure_filename對(duì)中文不支持問(wèn)題的文章就介紹到這了,更多相關(guān)Python secure_filename不支持中文內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 宿州市| 鸡泽县| 周宁县| 杭锦后旗| 临海市| 嵊州市| 丰顺县| 成安县| 青冈县| 望奎县| 虹口区| 武功县| 类乌齐县| 会同县| 荥阳市| 昆明市| 尤溪县| 托里县| 当阳市| 石家庄市| 商水县| 渭源县| 仙桃市| 榆中县| 蓝山县| 谷城县| 中江县| 汝州市| 丰县| 永吉县| 彭阳县| 合山市| 弥勒县| 曲水县| 浏阳市| 通渭县| 卓尼县| 怀远县| 长沙县| 武隆县| 舟曲县|