比較檔名時,大小寫轉換函式需慎用

2021-06-15 06:36:07 字數 901 閱讀 2330

windows下的檔名是不區分大小寫的。

大小寫的概念不僅僅是英文本母中有,其他語言的字母中也有。

比如以下三個檔名在windows中是代表同乙個檔案:

τάχιστη.txt

τάχιστη.txt

τάχιστη.txt

這個檔名的文字摘自php文件 mb_strtolower 的範例中:

我也不知道這是哪國文字。

測試發現,ie6和chrome 27都能夠使用 string.prototype.tolowercase() 和 string.prototype.tolowercase() 方法來處理上面這串蝌蚪文的大小寫轉換。

不過 ecma-262 5.1 中的一些注文引起了我的擔憂:

中文版在這裡:

「某些字元的大小寫對映可產生多個字元」

「s.touppercase().tolowercase() 不一定等於 s.tolowercase()」

我不明白這些文字為何會有這樣的情況,也不知道這些情況在windows這種不區分檔名大小寫的環境中會產生怎樣的問題。

我也不知道php的多位元組字串大小寫轉換函式,與ecmascript的大小寫轉換方法行為是否完全一致(也許可以寫點程式測試一下)。

另外,unicode好像是在不斷發展的,這些都成了不確定因素。

因此,我現在只能推斷,通過程式中的大小寫轉換函式來判斷某個「大寫的」檔名和某個」小寫的「檔名,在windows下是否是相同的檔案,嚴格來說可能是不靠譜的。

大小寫不同的話,在程式中還是作為不同的檔案處理吧。

當然,如果有類似於「能夠確保檔名只能為英文本母」這樣的前提條件,能夠預知程式處理的結果,那麼轉換大小寫判斷重名檔案還是可以用的。

在處理php讀寫zip的時候,遇到到了上面的問題,於是記下來。

git檔名大小寫問題

於 在windows下,一開始提交了乙個coinlog.js檔案,後來把它重新命名為coinlog.js,居然提交不了。git提示沒有改動。後來才知道,原來git預設對檔名的大小寫不敏感。方案1,配置git 首先可以通過配置git來達到識別檔名大小寫的問題。命令如下 git config core....

iOS檔名大小寫問題

有一天下午,我除錯了很久,都沒有辦法把一張圖顯示出來,在模擬器上是正常顯示的,但真機上卻不能。快取清理過了,程式也刪除重灌過了,但都不起作用。最後發現了,原來是大小寫搞錯了,但為什麼模擬器不出現問題,真機就會呢?其實道理很簡單,就是檔案系統格式的不同而導致了模擬器和真機之間的差異。系統安裝的分割槽預...

Unity 識別檔名大小寫不同

遊戲工程使用git進行版本控制,git的乙個特徵是不對檔名大小寫敏感,需要手動去對單個檔案進行重名操作,若是有人不是通過重名,就無法上傳。在unity windows 編輯器讀取正常,在安卓下就有可能讀取不到檔案。若是在windows 下也能識別到檔案的真正名稱就沒有這個問題。增加個可以識別檔案真正...