문제

내가 찾는 것과 같은 윈도우 _wfopen() 아래 Mac OS X.어떤 생각이 있으십니까?

내가 필요로하기 위해이 포트에 Windows 사용하는 라이브러리 wchar* 에 대한 그것의 파일 인터페이스입니다.이지하는 것은 크로스-플랫폼 라이브러리가 의존하는 방법에 클라이언트 응용 프로그램을 얻을 것이 파일 경로와 그것을 줄 수 있습니다.

도움이 되었습니까?

해결책

POSIX API Mac OS X 에서 사용할 수 있는 UTF-8strings.기 위해서는 변환하 wchar_t 문자열을 UTF-8 사용하는 것이 가능하 CoreFoundation framework 에서 Mac OS X.

여기에는 클래스 랩 UTF-8 을 생성한 문자열에서 wchar_t 문자열입니다.

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;
};

사용법:

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

이 일을 읽거나 쓰기 위해 파일이 있습니다.

다른 팁

당신만 원하는 파일을 열고 파일 핸들을 사용하여 경로를 포함할 수 있는 유니코드 문자,right?그냥 전달 경로에서 파일시스템의 표현 하기 fopen.

  • 경로에서 온 주식 Mac OS X 프레임워크(예를 들어,열패널 여부에 탄소나 코코아),당신은 당신을 할 필요가 없이 어떤 변환을 그것에 사용할 수 있는 그대로입니다.

  • 를 생성하는 경우의 일부 경로 자신을 만들어야 합니다 CFStringRef 에서의 경로와 그 다음에 그것을 얻을 파일시스템의 표현을 통과하는 POSIX Api 아 openfopen.

일반적으로 말하자면,당신은 없을 것이 많이 할 수 있는 대부분의 응용 프로그램.예를 들어,많은 응용 프로그램이 있을 수 있습 보조 데이터 저장된 파일을 사용자의 응용 프로그램을 지원 디렉토리지만,그만큼 사람들의 이름은 파일이 ASCII,그리고 당신이 사용하는 표준 Mac OS X Api 을 찾는 사용자의 응용 프로그램을 지원 디렉토리로,당신은 당신을 할 필요가 없는 한 무리의 편집 변환 경로를 건설하는 사람들과 다음 두 가지 요소로 구분됩니다.

편집을 추가합니다: 나는 강하게 주의 임의로 변환 모든 것을 UTF-8 사용하여 같은 뭔가 wcstombs 기 때문에 파일시스템 인코딩은 반드시 동일 생성 UTF-8 입니다.Mac OS X,윈도우 모두 사용하여 특정한다(그러나 다)정규 분해 규정에 대한 인코딩에서 사용되는 파일시스템 경로입니다.

예를 들어,그들이 필요한지 여부를 결정하"는"으로 저장될 것이 하나 또는 두 개의 코드 단위(중 LATIN SMALL LETTER E WITH ACUTELATIN SMALL LETTER E 다음 COMBINING ACUTE ACCENT).이러한 결과는 것입니다에서 두 개의 서로 다른와는 다른 길이의 바이트 시퀀스,그리고 Mac OS X 와 Windows 작업을 끄는 것을 피하기 위하여 여러 파일과 동일한 이름(사용자 인식들)에서 같은 디렉토리에 있습니다.

규칙을 수행하는 방법에 대한 이 정규 분해할 수 있을 털이,그래서 보다는 오히려 그것을 구현하려고 자신을 그것의 최고의 그것을 떠나 함수는 시스템 프레임워크가 제공하는 당신을 위해 무거운 들기입니다.

@JKP:

모든 기능에 MacOS X 동 UTF8 지만,파일 이름 및 filepaths 될 수 있습 UTF8,따라서 모든 POSIX 기능을 다루는 파일에 액세스(오픈,fopen,통계분석,etc.) 동 UTF8.

.견적:

는 방법 파일 이름에서 보이는 API 수준 에 따라 달라집합니다.현재탄 Api 를 처리하는 파일 이름으로 배열의 UTF-16 문자;POSIX 사람을 처리 그들의 배열로 UTF-8 왜 UTF-8 에서 잘 작동합니다.는 방법 그것은 디스크에 저장됩에 따라 달라집 디스크 형식HFS+UTF-16,지 는 중요하지 않습니다.

다른 POSIX 수 처리 UTF8 니다.E.g.기능을 다루는 사용자 이름,group 이름 또는 사용자 암호를 사용하 UTF8 정보를 저장(따라서 사용자 이름 수 있는 일과 당신의 비밀번호할 수 있 중국어,문제 없음).

하지만 모든 손잡이 UTF8.E.g.에 대한 모든 문자열 기능이 있는 UTF8 문자열은 정상적인 C 문자열과 문자를 위 126 없는 특별한 의미를 갖습니다.그들은하지 않는 개념을 이해하는 여러 개의 바이트(chars C)를 형성하는 하나의 유니코드 문자입니다.어떻게 다른 Api 처리 char*포인터를 전달되고 있음을 그들은 다른 API 하는 API 입니다.그러나,원칙적으로 엄지로 당신이 말할 수 있습니다:

중 기능이만 허 C 문자열을 가진 순수한 ASCII 문자(만 0 126)또는 그것을 받아들일 것입 UTF8.일반적으로 기능을 허용하지 않는 문자를 위 126 고 해석에 어떤 다른 인코딩보다 UTF8.만약 이 사건이었다,그것은 문서화하고 있어야 다음을 전달하는 방식으로 인코딩과 함께 문자열입니다.

를 사용하는 경우 코코아 그것은 매우 쉽게@입니다.그냥을 로드 UTF16 데이터를 사용하여-initWithBytes:길이:인코딩:(또는 아마도-initWithCString:인코딩)을 얻을 UTF8 버전을 호출하여 UTF8String 에 결과입니다.그런 다음 전화 fopen 와 함께 새로운 UTF8 문자열로 param.

당신은 확실히 수출 fopen 로 UTF-8,문자열에 관계없이 언어 도움이되지 수 있 C++OSX 에서도 죄송합니다.

I have read 에서 파일 이름을 구성 UTF8 을 통해 파일 wifstream (사용 wchar_t 버퍼).

Mac 구현은 다른 리눅스에서하고 Windows.wifstream 읽고 각각의 바이트에서 파일을 분리 wchar_t 세포에서 버퍼입니다.그래서 우리는 3 바이트 빈이지만, 오픈char 문자열입니다.따라서 사용할 수 있는 프로그래머 wcstombs 기능을 변환하는 와이드 문자열하는 멀티바이트 문자열입니다.

API 지원 UTF8.에 대한 더 나은 이해를 사용하여 메모리 감시자과 육에 대한 편집기의 파일입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top