Dosya adı kodlamasının nasıl çalıştığını anlamakta zorlanıyorum. Unix.SE'de çelişkili açıklamalar buluyorum.
Dosya adları karakter olarak saklanır
Başka bir cevap alıntı yapmak için: Linux'ta dosya sistemi karakter kodlaması hakkında birkaç soru
[…] Sorunuzda bahsettiğiniz gibi, bir UNIX dosya adı sadece bir karakter dizisidir; çekirdek, tamamen bir kullanıcı-alanı (yani uygulama seviyesi) konsepti olan kodlama hakkında hiçbir şey bilmiyor.
Dosya adları karakter olarak saklanırsa, sonunda dosya adının diskte bir bit veya bayt dizisi olması gerektiğinden, bir tür kodlamanın dahil olması gerekir. Kullanıcı , karakterleri çekirdeğe beslenen bir bayt dizisine eşlemek için herhangi bir kodlamayı seçebiliyorsa , geçerli bir dosya adı için herhangi bir bayt dizisi oluşturmak mümkündür .
Aşağıdakileri yapın: Bir kullanıcı , dosyayı bayt dizisine α dönüştüren ve diske kaydeden bir rastgele X kodlaması kullanır . Başka bir kullanıcı Y kodlamasını kullanır . Bu kodlamada α bir dosya adı olarak izin verilmeyen bir çeviriye dönüşür . Ancak, ilk kullanıcı için dosya geçerlidir.foo
/
Bu senaryonun gerçekleşemeyeceğini varsayıyorum.
Dosya adları ikili blob olarak saklanır
Başka bir cevap alıntı yapmak için: Hangi karakter kümesi kodlaması Linux'ta dosya adları ve yollar için kullanılır?
Başkaları tarafından belirtildiği gibi, bunun gerçekten bir cevabı yoktur: dosya isimleri ve yolların kodlaması yoktur; İşletim sistemi yalnızca bayt sırası ile ilgilenir. Bireysel uygulamalar onları bir şekilde kodlanmış olarak yorumlamayı seçebilir, ancak bu değişebilir.
Sistem karakterlerle ilgilenmezse , dosya adlarında belirli karakterler (örneğin /
veya NULL
) nasıl yasaklanabilir? /
Kodlama olmadan bir kavram yoktur .
Bir açıklama, dosya sisteminin herhangi bir
karakter içeren dosya adlarını saklayabileceği ve sadece geçersiz karakterler içeren dosya adlarında boğulacak kodlamayı dikkate alan kullanıcı programları olabilir. Bunun anlamı, dosya sistemlerinin ve çekirdeğin, herhangi bir zorlukla karşılaşmadan, a içeren dosya adlarını kullanabileceği anlamına gelir /
.
Bunun yanlış olduğunu da varsayıyorum.
Kodlama nerede gerçekleşir ve kısıtlama belirli karakterlere izin vermeme durumunda nerede yapılır?