2009-05-17 5 views
5

Si escribo:no cambiar el nombre de los personajes secundarios de varios bytes

rename('php109.tmp','test.jpg'); 

entonces está bien y trabajando.

pero si lo cambio en:

rename('php109.tmp','中文.jpg'); 

que va a informar

"No existe el fichero o directorio ...".

Pero si los caracteres de varios bytes se pueden escribir en la base de datos, entonces se pueden leer, ¿por qué falla cuando se renombra?

+0

¿Su sistema operativo o sistema de archivos admite nombres de archivos de varios bytes? – garrow

+0

sí, y aquí hay más información: se maneja cuando se envía desde la página web, la codificación de la página es utf8 la codificación db es utf8. y descargué la cadena solo para encontrar que también es utf8 – omg

+0

¿Qué sistema operativo está utilizando? He probado esto en FreeBSD 4.11, Debian 5.0 y OS X 10.6.2, sin errores. Si está utilizando un sistema operativo con algún tipo de recurso de rastreo syscall, ¿puede intentarlo? –

Respuesta

-1

Estoy casi seguro de que la mbstring no tiene nada que ver con este problema específico, creo que el problema aquí se basa en la codificación de su archivo .php.

Intente cambiar la codificación del archivo a UTF-8 (¡no BOM!) En su editor de código.

+0

pero el archivo ya está codificado en utf8 .. – omg

0

Los sistemas de archivos no usan necesariamente UTF-8. Por ejemplo, esto es lo que dice Wikipedia sobre NTFS:

NTFS permite a cualquier secuencia de valores de 16 bits para la codificación de nombres (nombres de archivos, nombres corriente, nombres de índices, etc.). Este significa UTF-16 puntos de código son compatibles, pero el sistema de archivos no comprueba si una secuencia es válida UTF-16 (que permite a cualquier secuencia de valores cortos, no se limita a los de la norma Unicode ).

Es posible que necesite usar iconv() para convertir entre conjuntos de caracteres.

0

¿Intentó hacer un setlocale(LC_ALL, array("es_ES.utf-8","[email protected]",'es_ES')); o cualquiera que sea su código de país, para asegurarse de que la configuración regional esté configurada correctamente?

Si esta llamada no devuelve algo con 'utf-8' en ella, significa que falló y luego devolverá la configuración regional actual.

0

Esta muestra debería ser útil, debería encontrar su página de códigos de idiomas y reemplazarla con eso. Puedo probar el código de fuelle y funciona en Windows para nombres en árabe/persa:

$newname = iconv("utf-8", "cp1256","گچپژ"); 
echo rename("1.txt", $newname); 
Cuestiones relacionadas