日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python打开中文文件名_[请教]python的中文文件名处理

發(fā)布時(shí)間:2025/4/16 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python打开中文文件名_[请教]python的中文文件名处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

該樓層疑似違規(guī)已被系統(tǒng)折疊 隱藏此樓查看此樓

3 樓的可以用 sys.getfilesystemencoding 檢測(cè),但由於文件系統(tǒng)的差異,文件名 100% 無(wú)損轉(zhuǎn)還是不太可,比如很多 *nix 的文件系統(tǒng)支持除 / 和 \0 外的所有字符,而 win 下不可能

4 樓的可以看 log,當(dāng)然最好的情況是設(shè) logger,設(shè)好以后是一勞永逸的,看 request 和所用的 template 之類的,可以使用 django debug toolbar

1, 5 樓是典型的 encoding 問(wèn)題

文件名先撇開(kāi)不說(shuō),就說(shuō)字符編碼,只要理清邏輯,那麼類似的 ascii 無(wú)法 encode 的錯(cuò)誤你就知道怎麼避免

先說(shuō)編碼,ascii 屬於 7bit,就算加上最高位,也只能編碼 256 個(gè)字符,不說(shuō) cjk,就光光所有歐洲語(yǔ)系都不夠用,於是就出現(xiàn)各種編碼方案,特別是 cjk 的,如早期的 gb2312 和 big5

嗯,扯遠(yuǎn)了,先拉回來(lái)

簡(jiǎn)單的說(shuō),目前常見(jiàn)的 cpython2 打包,估計(jì)編譯時(shí)多設(shè)了內(nèi)部使用 ucs2 編碼,部分可能用 ucs4,簡(jiǎn)單的說(shuō)就是 cpython 內(nèi)部處理

嗯,這個(gè)角度還是太遠(yuǎn)

這麼說(shuō)吧,就是當(dāng)你在外部輸入字符串的時(shí)候,如果有非 ascii 字符,那麼是一定帶有特定的編碼方案的,即所謂的 encoding,比如你常用的 linux 下很可能是 utf-8,那麼如果你要轉(zhuǎn)換成其他編碼方案,比如 gtk,需要先 decode,然后再 encode

比如:

在 utf-8 下的終端中的 repl

>>> s = '中文' # <- 這個(gè)是 utf-8 編碼的 str,如果按 python3 說(shuō)法,這個(gè)是 bytestring,純數(shù)據(jù)流

>>> u = s.decode('utf-8') # <- 這時(shí)候解碼了,變成 unicode string,也就是上面提到的內(nèi)部使用 ucs2 或 ucs4 (早版本 python 看解釋器編譯時(shí)的參數(shù),新一點(diǎn)的好像都是 ucs4 了,如果沒(méi)記錯(cuò)的話)

>>> s_gbk = u.encode('gbk') # <- 這時(shí)候,這兩個(gè)中文字用 gtk 編碼方案從新編碼了,如果(當(dāng)作二進(jìn)制數(shù)據(jù)流)直接寫進(jìn)文件,那麼就是用 gbk 編碼的文本文件

只要理清了這個(gè),那麼上面的文件就知道怎麼處理了,因?yàn)橥ǔJ歉拍顩](méi)理清,不知道什麼時(shí)候該用 encode,什麼時(shí)候該用 decode 造成的。

然后是文件名的編碼問(wèn)題了,一開(kāi)頭說(shuō)的可以找出本地文件系統(tǒng)默認(rèn)編碼,但是,各種方案對(duì) unicode 全字符集的支持不一,比如 gb2312 支持的就少,早期 window 用的 cp932(這個(gè)數(shù)字具體記不清楚) 也少,直接轉(zhuǎn) utf-8 通常還會(huì)出現(xiàn)問(wèn)題,必須過(guò)濾掉非法字符,但這樣又可能出現(xiàn)額外的重名,現(xiàn)代的 windows 文件系統(tǒng)名字編碼應(yīng)該沒(méi)問(wèn)題了,但是我太久沒(méi)用過(guò),無(wú)法驗(yàn)證。

這幾天事情很多,目前只能先草草說(shuō)一下,太亂了將就一些

總結(jié)

以上是生活随笔為你收集整理的python打开中文文件名_[请教]python的中文文件名处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。