2012-09-02 12 views
7

Me gustaría conocer la codificación de caracteres de los nombres de archivo en un sistema de archivos para mostrarlos correctamente en una GUI.cómo saber la codificación de caracteres de los nombres de archivo (según el sistema de archivos)

¿Cómo debo hacer esto?

supongo consigo codificación de caracteres diferente en función del sistema de archivos (FAT, NTFS, ext3, etc.)

Gracias

(yo trabajo en C++, pero este tema no está relacionado con el lenguaje)

+2

Depende del sistema de archivos en sí. Algunos sistemas de archivos admiten la codificación de caracteres, y algunos solo uno. Y la mayoría no almacena la codificación en el sistema de archivos en sí, ya que la codificación ya está definida por su documento de especificaciones. Tendrá que almacenar manualmente esta información en su propia base de datos. – Jay

+0

Esto realmente depende de la API y, por lo tanto, de la plataforma (SO) que esté utilizando. Sin embargo, en C++ 17 podría ser la biblioteca estándar del sistema de archivos completa e incluida, lo que probablemente debería resolver este problema de alguna manera. –

Respuesta

5

NTFS es Unicode (UTF-16). exFAT también es Unicode.

FAT y FAT32 original utilizan juego de caracteres OEM (lea más en MSDN).

En Linux y Unix nombre de archivo puede contener cualquier bytes excepto NUL y el conjunto charater no está definido. En consecuencia, cada aplicación decide cuál usar. Muchas aplicaciones usan UTF8. Vea más en this question.

El anterior enfoque de Unix se utiliza en la mayoría de los sistemas de ficheros (principalmente debido a que el concepto de "juego de caracteres" tiene más sentido en el nivel de sistema operativo que en el nivel de almacenamiento). Puede verificar las capacidades y los requisitos de FS con respecto a los caracteres de los archivos here (tabla 2 columna 3).

+0

Unicode es una representación abstracta, no una representación de bytes. Necesita una codificación para convertir unicode en bytes. – user803422

+0

@ user803422 "Unicode" como en Windows significa UTF16. He actualizado la respuesta. –

+0

En mi Windows 7 - Unidad NTFS, los nombres de los archivos están en UTF-8. Entonces el UTF-16 no es una regla general. La explicación de MSDN es bastante complicada. – user803422

0

En Linux, ejecute el siguiente comando: locale | egrep "LANG =" | corte -d. -f 2

En los sistemas Unix, la codificación de los archivos no se establece en el nivel de sistema de archivos, sino más bien en el entorno del usuario. Por ejemplo, UTF-8 es la configuración predeterminada en Ubuntu.

En Windows codificación predeterminada es CP-1252 (AKA ISO-8859-1 o Latin-1), pero FS utiliza Unicode a través de codificación UTF-16. Ver http://en.wikipedia.org/wiki/Filename.

Pero si utiliza Qt, se puede construir la siguiente con Qt Creator y el resultado será el nombre de usuario actual codificación.

#include <QTextCodec> 
#include <iostream> 

using namespace std; 
int main(int argc, char *argv[]) 
{ 
    Q_UNUSED(argc); Q_UNUSED(argv); 
    QTextCodec* tc = QTextCodec::codecForLocale(); 

    cout << "Current names text codec: " << tc->name().data() << endl; 
    return 0; 
} 
+1

ISO 8859-1 y América-1 son la misma cosa, pero Windows-1252/CP-1252 es ligeramente diferente: "Esta codificación es un superconjunto de la norma ISO 8859-1, pero difiere de la norma ISO-8859-1 de la IANA usando caracteres visualizables en lugar de caracteres de control en el rango de 80 a 9 F (hex) ". - [Wikipedia] (http://en.wikipedia.org/wiki/Windows-1252) –

Cuestiones relacionadas