c – 如何在Linux中使用包含非Ascii字符串的wchar_t *打开文件?

环境:Gcc / G Linux

我在文件系统中有一个非ascii文件,我打算打开它.

现在我有一个wchar_t *,但我不知道如何打开它. (我信任的fopen只打开char *文件)

请帮忙.非常感谢.

最佳答案
有两种可能的答案:

如果要确保所有Unicode文件名都可以表示,则可以硬编码文件系统使用UTF-8文件名的假设.这是“现代”Linux桌面应用程序方法.只需将你的字符串从wchar_t(UTF-32)转换为UTF-8,使用库函数(iconv可以正常工作)或你自己的实现(但查找规范,这样你就不会像Shelwien那样得到可怕的错误),然后使用fopen .

如果你想以更加面向标准的方式做事,你应该使用wcsrtombs将wchar_t字符串转换为语言环境编码中的多字节字符串(在任何现代系统中无论如何都希望是UTF-8)并使用fopen.请注意,这要求您先前使用setlocale(LC_CTYPE,“”)或setlocale(LC_ALL,“”)设置语言环境.

最后,不是一个答案,而是一个建议:

将文件名存储为wchar_t字符串可能是一个可怕的错误.您应该将文件名存储为抽象字节字符串,并且仅将它们转换为wchar_t,以便在用户界面中显示它们(如果它甚至是必需的;许多UI工具包本身使用普通字节字符串并将解释作为字符为了你).通过这种方式,您可以消除许多可能令人讨厌的极端情况,并且您永远不会遇到某些文件由于其名称而无法访问的情况.

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...