8

我想知道文件系统中文件名的字符编码,以便在 GUI 中正确显示它们。

我该怎么做?

我想我会根据文件系统(FAT、NTFS、ext3 等)得到不同的字符编码。

谢谢

(我在 C++ 中工作,但这个主题与语言无关)

4

2 回答 2

7

NTFS 是 Unicode (UTF-16)。exFAT 也是 Unicode。

原始 FAT 和 fAT32 使用 OEM 字符集(在MSDN上阅读更多内容)。

在 Linux 和 Unix 上,文件名可以包含除 NUL 之外的任何字节,并且未定义字符集。因此,每个应用程序自行决定使用哪一个。许多应用程序使用 UTF8。在这个问题中查看更多信息。

上面的 unix 方法用于大多数文件系统(主要是因为“字符集”概念在操作系统级别上比在存储级别上更有意义)。您可以在此处检查 FS 功能和有关文件名字符的要求(表 2 第 3 列)。

于 2012-09-02T16:02:26.987 回答
0

在 Linux 中运行以下命令:locale | egrep "LANG=" | 切 -d 。-f 2

在类 Unix 系统上,文件名的编码不是在文件系统级别设置的,而是在用户环境中设置的。例如,UTF-8 是 Ubuntu 中的默认设置。

在 Windows 上,默认编码是 CP-1252(AKA ISO-8859-1 或 Latin-1),但 FS 通过 UTF-16 编码使用 Unicode。请参阅http://en.wikipedia.org/wiki/Filename

但如果您使用 Qt,您可以使用 Qt Creator 构建以下内容,结果是当前用户编码名称。

#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;
}
于 2013-10-22T14:30:44.370 回答