gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:02:40 24 4
gpt4 key购买 nike

环境:Gcc/G++ Linux

我在文件系统中有一个非 ASCII 文件,我要打开它。

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

请帮忙。非常感谢。

最佳答案

有两种可能的答案:

如果您想确保所有 Unicode 文件名都可表示,您可以硬编码文件系统使用 UTF-8 文件名的假设。这是“现代”Linux 桌面应用程序方法。只需将字符串从 wchar_t (UTF-32) 转换为带有库函数的 UTF-8(iconv 可以很好地工作)或您自己的实现(但要查找规范,这样您就不会不要像 Shelwien 那样把它搞得一团糟),然后使用 fopen

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

最后,不完全是答案而是建议:

将文件名存储为 wchar_t 字符串可能是一个可怕的错误。您应该将文件名存储为抽象字节字符串,并且只将它们及时转换为 wchar_t 以便在用户界面中显示它们(如果有必要的话;许多 UI 工具包使用纯字节字符串他们自己并为你做角色的解释)。通过这种方式,您可以消除许多可能的讨厌的极端情况,并且您永远不会遇到某些文件因其名称而无法访问的情况。

关于c++ - 如何在 Linux 中打开包含非 Ascii 字符串的 wchar_t* 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com