如何根据文件系统了解文件名的字符编码

问题描述 投票:7回答:2

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

我该怎么做?

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

谢谢

(我使用的是C ++,但这个主题与语言无关)

filesystems filenames
2个回答
5
投票

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

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

在Linux和Unix上,filename可以包含除NUL之外的任何字节,并且未定义charater集。因此,每个应用程序决定使用哪一个。许多应用程序使用UTF8。在this question中查看更多信息。

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


0
投票

在Linux中运行,然后执行以下命令:locale | egrep“LANG =”|切-d。 -f 2

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

在Windows上,默认编码为CP-1252(AKA ISO-8859-1或Latin-1),但FS使用Unicode通过UTF-16编码。见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;
}
© www.soinside.com 2019 - 2024. All rights reserved.