如何修復在子目錄中看起來不太好的 UTF-8 字元編碼文件名
我有像
Käyttöohje.pdf
. 這應該是Käyttöohje.pdf
。我可以使用以下命令轉換子目錄中的所有文件:
convmv -f utf8 -t iso-8859-1 -r --notest *
這轉換
Käyttöohje.pdf
為Käyttöohje.pdf
.問題是文件是否已經存在
Käyttöohje.pdf
文件
Käyttöohje.pdf
轉換為K'$'\344''ytt'$'\366''ohje.pdf
如何更改上述命令,以便
Käyttöohje.pdf
被轉換為Käyttöohje.pdf
(單獨留下)和Käyttöohje.pdf
仍然轉換為Käyttöohje.pdf
您不正確的文件似乎是雙 UTF-8 編碼。
例如,
ä
U+00E4 已被編碼為:
- U+00E4 -> 0xc3 0xa4(UTF-8 編碼)
- 0xc3 -> 0xc3 0x83 (iso8859-1
Ã
-> UTF-8), 0xa4 -> 0xc3 0xa4 (iso8859-1¤
-> UTF-8) 其中 U+00E4 的 UTF-8 編碼的每個字節都被解釋為是在單字節字元集(這裡可能是 iso8859-1 或 windows-1252)中對某些其他字元進行編碼,並在 UTF-8 中再次編碼。所以你使用它是正確
convmv -f utf8 -t iso-8859-1
的。要單獨保留未雙重編碼的文件,convmv
有一個特殊選項:--fixdouble
,所以它應該是:convmv --fixdouble -f utf8 -t iso-8859-1 -r --notest .
convmv
手冊中有專門的部分:如何撤消雙 UTF-8(或其他)編碼文件名
有時您可能會“雙重編碼”某些文件名,例如文件名已經是 UTF-8 編碼,而您不小心將某些字元集轉換為 UTF-8。您可以通過相反的方式簡單地撤消它。from-charset 必須是 UTF-8,to-charset 必須是您之前不小心使用的 from-charset。如果您使用“–fixdouble”選項,convmv 將確保僅處理轉換後仍為 UTF-8 編碼的文件,並且不會觸及非 UTF-8 文件。您應該通過在沒有“–notest”之前進行轉換來檢查以獲得正確的結果,“–qfrom”選項可能會有所幫助,因為如果列印雙 utf-8 文件名可能會搞砸您的終端 - 它們通常包含控制序列,這些控制序列會在您的終端視窗中做一些有趣的事情。如果您不確定意外轉換的字元集,使用“–qfrom”是一種在不破壞文件名的情況下整理所需編碼的好方法。
通過 iso8859-1 進行雙 UTF 編碼的文件(涵蓋程式碼點 U+0000 U+00FF)將包含由 U+00C2 -> U+00F4 範圍內的一個字元組成的非 ASCII 字元序列 (
ÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóô
)後跟一個或多個 U+0080 -> U+00BF 範圍內的字元(U+0080 到 U+009F 是控製字元加不間斷空格加¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿
)。這些序列相對不太可能出現在非雙編碼文本中,特別是考慮到 U+00E0 以上的字元(上面第一組中的小寫字元)必須跟在第二組中至少 2 個字元之後,所以convmv --fixdouble
是不太可能弄錯。