Der Martin: Welche Zeichencodierung unter Windows ?

Beitrag lesen

Hallo,

Eine Datei wird unter Windows XP (Deutsch) mit dem Namen sÄÜ.txt einmal im UTF8 Format und einmal als ANSI gespeichert.

deine weiteren Ausführungen lassen nur einen Schluss zu: Die obige Annahme ist falsch, die vermeintlich in UTF-8 gespeicherte Datei ist _nicht_ UTF-8.
Vergleiche mal die Dateigröße: Die in ISO-8859-x oder Windows-1252 gespeicherte (also das, was Windows unter "ANSI" versteht) dürfte 7 Byte lang sein (oder 9, wenn sie am Ende des Strings noch einen Zeilenumbruch hat), die andere 9 (oder 11 mit zeilenumbruch), ggf. sogar 12 bzw. 14, wenn sie mit BOM gespeichert wurde. Hinweis: Notepad speichert UTF-8 immer mit BOM.

Wenn ich nun die länge der Datei mit PHP ermitteln möchte bekomme ich mit strlen den Wert 7 und mit mb_strlen($f, 'utf8') den Wert 6 unabhängig in welchem Format. Also immer gleich.

Ausgabe:
das file t ist s??.kdk mit länge 7 und 6

Das ist die in ISO ("ANSI") gespeicherte Fassung. Da darf mb_strlen() zu einem falschen Ergebnis kommen, weil Bytefolgen auftreten, die in UTF-8 nicht zulässig sind und die korrekte Zählung behindern.
Und bei der in UTF-8 gespeicherten Version? Vermutlich 12 und 8?

if(is_dir($useruploadtmp)){

$d = opendir($useruploadtmp);
while (false !== ($f = readdir($d))){
if(is_file($useruploadtmp . "/" . $f)){
$filename_ges = strlen($f);
$filename_ges_utf8 = mb_strlen($f, 'utf8');
echo "<br><br>das file t ist $f mit länge $filename_ges und $filename_ges_utf8<br>";
}
}
closedir($d);
}

  

> Eigentlich rechnet strlen ja richtig obwohl ich annahm das die Zeichen ÄÜ doppelt gezählt werden.  
> Mache ich einen Denkfehler?  
  
Ja: Du verschweigst die Auswertung der in UTF-8 gespeicherten Datei.  
  
So long,  
 Martin  

-- 
Die letzten Worte des Neandertalers:  
Möchte doch zu gern wissen, was in der Höhle ist ...