2011-11-30 26 views
7

Quiero detectar un sistema operativo de codificación del sistema de archivos como predeterminado, como el sistema operativo Windows en una versión de idioma diferente, utilizará una codificación diferente (iso-8859-1, ms950, big5, gb2312..etc) Entonces, ¿cómo puedo detectar el diferente sistema operativo de codificación en PHP? ¿Alguna idea? Gracias.¿Cómo detectar la codificación del sistema operativo en php?

+0

¿Ha marcado otras preguntas aquí en SO con respecto a la identificación de la codificación? Mire esto, por ejemplo: http://stackoverflow.com/questions/910793/php-detect-encoding-and-make-everything-utf-8 O este: http://stackoverflow.com/questions/505562/ detectar-file-encoding-in-php –

+0

No estoy seguro de que el sistema de archivos delegue una codificación ... mb_list_encodings devolverá una lista de codificaciones compatibles. – Incognito

+0

Eso no es lo que quiero responder y esa es una pregunta diferente con mi – Jasper

Respuesta

1

Linux no tiene una codificación, los nombres de archivo se almacenan en cadenas binarias y pueden contener cualquier cosa. Interpretar eso en una codificación específica depende de la aplicación. La mayoría de las veces esto simplemente será UTF-8. Pero sí, depende del 'espectador' de los nombres de archivo.

Acceso al sistema de archivos en OS/X va a utilizar UTF-8 normalización forma D.

Por desgracia, no puedo responder a lo que es en las ventanas. Internamente se almacena como una variación de UTF-16, pero accediendo a través de PHP en mi máquina, la API es CP-1252, pero sí, esto depende del idioma.

0

Trate

print_r(explode(";", setlocale(LC_ALL, 0))); 

este caso es necesario convertir la página de códigos para codificar

0

sistema de archivos no se tener un tipo de codificación, cada archivo puede utilizar diferentes tipos de codificación, por lo que todo lo que necesita es encontrar una codificación correcta para procesar la cadena de nombre de archivo.

Para detectar la codificación de un nombre de archivo, puede "intentar" convertir ese nombre de archivo a toda la lista de codificación conocida y comparar la cadena de nombre de archivo original con la cadena convertida, si es igual, entonces esa codificación es lo que está buscando .

Convierta una cadena a un tipo de codificación que uso This way. Entonces para hacer este trabajo, puede ver el siguiente código para un ejemplo.

function getActuallEncoding($text) { 
    $encodingList = array('UTF-8', 'gb2312', 'ISO-8859-1', 'big5'); // Add more if you need. 
    foreach($encodingList as $oneEncode) { 
     $oneResult = iconv(mb_detect_encoding($text, mb_detect_order(), true), $oneEncode, $text); 
     if(md5($oneResult) == md5($text)) return $oneEncode; 
    } 
    return "UNKNOWN"; // This return value may cause problem, just let you know. 
} 

Espero que ayude.

Cuestiones relacionadas