dosya adı kodlama sorunu


9

Faroese adında bir dosya alıyorum ve bir PHP betiğinde kaydetmeye çalışıyorum:

2010_08_Útflutningur.xls

Ubuntu'da 10.04 LTS şu şekilde kaydediyor:

2010_08_�tflutningur.xls (invalid encoding)

Yükledim ve çalıştırdım utf8-migration-tool, ancak hiçbir etkisi yok.

Bu düzeltmek bir Ubuntu hatası mı yoksa sadece vazgeçmek ve php adı değiştirmek zorunda?

Ubuntu'da bir dosya adı için kabul edilebilir karakter kümesinin ne olduğunu veya kodlama özelliklerinin neler olduğunu belirten bir belge var mı?

Teşekkürler


PHP ile dosyayı nasıl alıyorsunuz ve kaydediyorsunuz? (Kod neye benziyor?)
Kees Cook

Bir e-posta sisteminden ayrıştırıyordum. Kod karmaşık :)
Elzo Valugi

Orada benzer bir soru-cevap onarım kırık dosya için bir komut ile.
lumbric

Yanıtlar:


5

Bu bir kodlama sorununa benziyor. Ne yazık ki, PHP kodlama söz konusu olduğunda biraz el tutma gerektirir, çünkü dizeleri varsayılan olarak tek bayttır. PHP içinde dosya adı oluşturuyorsanız, utf8_encode()yardımcı olacaktır; bununla birlikte, giriş için ISO-8859-1 kodlamasını varsaydığını unutmayın.

Öte yandan, bir istemci tarafından gönderilen dosya adını kullanıyorsanız, istemciden kodlamayı sizin için yapmasını isteyebilirsiniz. Bu, etiketin accept-charsetniteliğiyle <form>ve / veya formun bulunduğu sayfanın karakter kümesini ayarlayarak yapılır. Bazı istemciler birini veya diğerini kullanabilir, bu nedenle en iyi sonuçlar için her biri için UTF-8 kullanın.


7

Varsayılan olarak Ubuntu, dosya adları için UTF-8 kullanır. Çoğu modern linux dağıtımları ve diğer birçok işletim sistemi bunu yapar (Windows / NTFS, UTF-16'da bilinen en iyi istisnadır).

Gösterdiğiniz gibi yanlış kodlamada adları olan dosyaları düzeltmek için kullanmayı deneyebilirsiniz nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

iconvDizeleri (dosya adları) bir kodlamadan diğerine dönüştürmek için PHP işlevlerini kullanabilirsiniz . Tabii ki bu, hangi kodlama ile başlamak gerektiğini bilmenizi gerektirir.

İstemciden doğru şekilde kodlanmış dosya adları almak için eswald tarafından açıklanan tekniği deneyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.