首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Mac下的_wfopen等效项

Mac下的_wfopen等效项
EN

Stack Overflow用户
提问于 2008-08-15 14:59:12
回答 2查看 10.3K关注 0票数 18

我正在寻找Mac下的视窗_wfopen(),你有什么想法吗?

我需要它来移植一个使用wchar*作为File接口的Windows库。由于这是一个跨平台库,我无法依赖于客户端应用程序如何获取文件路径并将其提供给库。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-11-05 15:07:27

Mac OS X中的POSIX API可用于UTF-8字符串。为了将wchar_t字符串转换为UTF8,可以使用Mac中的CoreFoundation框架。

下面是一个类,它将从wchar_t字符串包装UTF-8生成的字符串。

代码语言:javascript
复制
class Utf8
{
public:
    Utf8(const wchar_t* wsz): m_utf8(NULL)
    {
        // OS X uses 32-bit wchar
        const int bytes = wcslen(wsz) * sizeof(wchar_t);
        // comp_bLittleEndian is in the lib I use in order to detect PowerPC/Intel
        CFStringEncoding encoding = comp_bLittleEndian ? kCFStringEncodingUTF32LE
                                                       : kCFStringEncodingUTF32BE;
        CFStringRef str = CFStringCreateWithBytesNoCopy(NULL, 
                                                       (const UInt8*)wsz, bytes, 
                                                        encoding, false, 
                                                        kCFAllocatorNull
                                                        );

        const int bytesUtf8 = CFStringGetMaximumSizeOfFileSystemRepresentation(str);
        m_utf8 = new char[bytesUtf8];
        CFStringGetFileSystemRepresentation(str, m_utf8, bytesUtf8);
        CFRelease(str);
    }   

    ~Utf8() 
    { 
        if( m_utf8 )
        {
            delete[] m_utf8;
        }
    }

public:
    operator const char*() const { return m_utf8; }

private:
    char* m_utf8;
};

用法:

代码语言:javascript
复制
const wchar_t wsz = L"Here is some Unicode content: éà€œæ";
const Utf8 utf8 = wsz;
FILE* file = fopen(utf8, "r");

这将适用于读取或写入文件。

票数 15
EN

Stack Overflow用户

发布于 2008-08-15 15:26:27

如果你使用的是Cocoa,那么使用NSString就相当简单了。只需使用-initWithBytes:length:encoding:(或者可能是-initWithCString:encoding:)加载UTF16数据,然后通过对结果调用UTF8String来获得UTF8版本。然后,只需使用新的UTF8字符串作为参数来调用fopen。

你绝对可以用UTF-8字符串来调用fopen,不管是哪种语言--不过在OSX上用C++是无能为力的--对不起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档