我有一个在 Windows 下开发的应用程序,但用于 gcc。代码大部分是独立于操作系统的,只有很少的类是特定于 Windows 的,因为 Linux 端口总是被认为是必要的。
API,尤其是作为用户交互的直接结果被调用的 API,正在使用宽字符数组而不是字符数组(作为旁注,我无法更改 API 本身——此时,std::wstring 不能使用)。这些被认为是用 UTF-16 编码的。
在某些地方,代码打开文件,主要是使用特定于 windows 的 _wopen
函数调用。问题在于没有类似 wopen
的 Linux 替代品,因为 Linux“只处理字节”。
问题是:我该如何移植这段代码?如果我想打开一个名称为“something™.log”的文件,我将如何在 Linux 中打开它?强制转换为 char* 是否足够,是否会根据语言环境自动获取宽字符(可能不会)?我需要手动转换吗?我对此有点困惑,也许有人可以指点我一些关于此事的文件。
最佳答案
我在 Mac 上采用的策略取决于 Mac OS X 在其所有文件 io POSIX api 中使用 utf-8 的事实。
因此,我创建了一个类型“fschar”,它在 Windows 非 Unicode 构建中是一个 char,在 Windows UNICODE 构建中是 wchar_t,在为 Mac OS 构建时(再次)是 char。
我使用这种类型传递所有文件系统字符串。字符串文字使用包装器 (TEXT("literal")) 进行编码以获得正确的编码 - 我的所有数据文件都在磁盘上存储 utf-8 字符,在 Windows UNICODE 构建中,我将 MultiByteToWideChar 转换为 utf16。
关于c++ - 移植到 Linux 时调用 wopen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2565661/