代码之家  ›  专栏  ›  技术社区  ›  laura

移植到Linux时wopen调用

c++
  •  1
  • laura  · 技术社区  · 15 年前

    我有一个应用程序是在Windows下开发的,但用于gcc。代码主要是独立于操作系统的,很少有特定于Windows的类,因为Linux端口一直被认为是必需的。

    API,尤其是作为用户交互的直接结果而被调用的API,正在使用宽字符数组而不是字符数组(附带说明,我不能更改API本身-此时,不能使用std::wstring)。这些被认为是用UTF-16编码的。

    在某些地方,代码打开文件,主要使用特定于Windows的 _wopen 函数调用。问题是没有 wopen -就像替代Linux一样,因为Linux“只处理字节”。

    问题是:如何移植此代码?如果我想打开一个名为“something_areqing.log”的文件,我该如何在Linux中这样做呢?强制转换为char*是否足够,是否根据区域设置自动提取宽字符(可能不足够)?我需要手动转换吗?我对此有点困惑,也许有人能给我指一些有关这件事的文件。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Chris Becke    15 年前

    我在Mac上采用的策略是基于这样一个事实:Mac OS X在其所有文件IO POSIX API中都使用了UTF-8。

    因此,我创建了一个类型“fschar”,在Windows非Unicode版本中是char,在Windows Unicode版本中是wchar,在为Mac OS构建时也是char。

    我使用这种类型传递所有文件系统字符串。字符串文本用包装纸(文本(“literal”)进行编码以获得正确的编码-我的所有数据文件都将utf-8字符存储在磁盘上,在Windows Unicode构建时,将多字节toWideChar转换为utf16。

        2
  •  0
  •   shoosh    15 年前

    Linux不支持UTF16文件名。但是它支持UTF8文件,并且可以使用普通的旧文件打开这些文件 fopen() .
    您应该做的是将宽字符串转换为utf8。