2010-04-02 5 views
1

저는 Windows에서 개발 된 응용 프로그램을 가지고 있지만 gcc 용으로 만들었습니다. 이 코드는 대부분 OS 독립적이며, Linux 포트가 항상 필요한 것으로 간주되기 때문에 Windows와 관련된 클래스는 거의 없습니다.리눅스로 이식 할 때 wopen이 호출됩니다.

특히 사용자 상호 작용의 직접적인 결과로 호출되는 API는 char 배열 대신 와이드 char 배열을 사용합니다 (보조 노트로 API 자체를 변경할 수 없음 -이 시점에서 std :: wstring 쓸 수 없다). 이들은 UTF-16으로 인코딩 된 것으로 간주됩니다.

코드에 따라 대부분 Windows 관련 _wopen 함수 호출을 사용하여 파일이 열립니다. 이 문제는 리눅스가 "바이트 만 처리하기"때문에 wopen과 같은 Linux 대체품이 없다는 것입니다.

질문 :이 코드를 어떻게 포팅합니까? "something ™ .log"라는 이름의 파일을 열려면 Linux에서 어떻게해야합니까? char * 에의 캐스트가 충분한 경우, 로케일에 근거 해 넓은 문자가 자동적으로 선택됩니다 (아마 아닐까)? 수동으로 변환해야합니까? 나는 이것에 관해 약간 혼란 스럽다. 아마도 누군가 그 문제에 관한 어떤 문서를 가르쳐 줄 수있을 것이다.

답변

1

Mac OS X이 모든 파일 POSIX API에서 utf-8을 사용한다는 사실에 대해 필자가 생각한 전략.

따라서 유니 코드가 아닌 Windows에서는 char이, UNICODE에서는 Windows에서 wchar_t가 만들어지고 Mac OS 용으로 만들 때 char (다시) 형식의 "fschar"이 만들어집니다.

이 유형을 사용하여 모든 파일 시스템 문자열을 전달합니다. 문자열 리터럴은 올바른 인코딩을 얻기 위해 래퍼 (TEXT ("literal"))로 인코딩됩니다. 모든 데이터 파일은 유니 코드가 작성하는 Windows에서 utf16으로 변환 할 디스크에 utf-8 문자를 저장합니다.

0

Linux는 UTF16 파일 이름을 지원하지 않습니다. 그러나 UTF8 파일을 지원하며 일반 old fopen()을 사용하여 열 수 있습니다.
넓은 문자열을 UTF8로 변환해야합니다.

관련 문제