문제

있는 표준 방법을 fopen 으로 유니코드 문자열 파일 경로?

도움이 되었습니까?

해결책

in *nix, 당신은 단순히 표준 fopen을 사용합니다 (Tokemacguy의 답장 또는 이것에서 자세한 정보 참조 또는 법정) Windows에서 _wfopen을 사용한 다음 유니 코드 문자열을 전달할 수 있습니다 (자세한 내용은 참조하십시오. MSDN).

실제적인 방법이 없기 때문에이 호출을 다른 모든 시스템 의존적 기능과 함께 매크로로 랩핑 할 것입니다.

다른 팁

없는 표준 방법입니다.사이 약간의 차이가 있 운영 체제입니다.여기에는 방법이 다른 Os 처리 비-ASCII 파일 이름.

Linux

리눅스에서 파일 이름은 단순히 이진 문자열입니다.컨벤션에서 가장 현대적인 분포를 UTF-8 을 사용한 비-ASCII 파일 이름.하지만 처음에는,그것은 일반적이었다 인코딩하는 파일 이름으로 ISO-8559-1.그것은 기본적으로 각각의 응용 프로그램을 선택한 인코딩할 수 있도록 다른 인코딩에서 사용되는 동일한 액세스를 참조하십시오.*이 LANG 환경변수는 당신에게 힌트 무엇을 원하는 인코딩이다.그러나 이러한 일이 있다고 생각한 UTF-8 다.

이 문제 없이기 때문에,하지만 파일을 포함하는 잘못된 UTF-8 시퀀스를 완벽하게 유효한가에 대부분의 리눅스 파일 시스템.당신은 어떻게 지정한 파일 경우에만 지원 UTF-8?이상적으로,당신은 모두를 지원 UTF-8 바이너리 파일 이름.

OS X

HFS 파일시스템 OS X 에서 사용 Unicode(UTF-16)파일 이름을 내부적으로 합니다.대부분의 C(및 POSIX)라이브러리 함수 fopen UTF-8 개 문자열은(이후 그들은 8-비트 compatible)및 변환 그들이 내부적으로 합니다.

Windows

Windows API 를 사용하 UTF-16,파일 이름만 fopen 만 지원하는 ASCII.많은 C 라이브러리 함수가 아닌 표준에 해당하는지 UTF-16(wchar_t on Windows).예를 들어, _wfopenfopen.

이것은 현재 로케일의 문제입니다. 내 시스템에서 유니 코드가 활성화 된 파일 경로는 유니 코드에 있습니다. 로케일 명령을 통해 이것을 감지 할 수 있습니다.

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"

파일 경로의 인코딩은 일반적으로 시스템을 넓게 설정하므로 파일 경로가 시스템의 로케일에 있지 않으면 아마도 아이콘 도서관.

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