c++ - 移植到 Linux 时调用 wopen

标签 c++

我有一个在 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/

相关文章:

c++ - 当我尝试为我的程序提供 3 个输入时,它需要 4 个才能正常运行。这是为什么?

c++ - C++ 唯一指针的复制语义

c++ - SFML 错误 loadFromFile()

c++ - 为什么用指针调用 GetWindowRect 会导致异常但地址不会

c++ - std::vector 插入的摊销分析

c++ - Windows CE - 禁用 CComboBox 突出显示

c++ - OpenSSL dll 文件存储在哪里?

c++ - 这段代码是字节序安全的吗?

c++ - regex_replace 在 Windows 上不起作用

c++ - C++ 有标准队列吗?