WinXP 시스템에서 비영어권 이름으로 파일 이름을 처리하는 프로그래밍을 시작하기 시작했습니다. 유니 코드에 대한 추천 도서를 읽었으며 기본 아이디어를 얻었지만 일부 요소는 여전히 나에게 분명하지 않습니다.NTFS의 파일 이름은 어떤 인코딩으로 저장됩니까?
특히 NTFS에 저장된 (내용은 아니지만 파일의 실제 이름) 파일 인 인코딩 (UTF-8, UTF-16LE/BE)은 무엇입니까? char *를 취하는 fopen()을 사용하여 파일을 열 수 있습니까? 아니면 wchar_t *를 사용하는 wfopen()을 사용하고 아마도 UTF-16 문자열을 사용합니까?
수동으로 UTF-8로 인코딩 된 문자열을 fopen() (예 :
unsigned char filename[] = {0xEA, 0xB0, 0x80, 0x2E, 0x74, 0x78, 0x74, 0x0}; // 가.txt
FILE* f = fopen((char*)filename, "wb+");
는하지만이 'ê ° €이 .txt'로 나왔다.
UTF8로 인코딩 된 문자열이 Windows에서 파일 이름을 여는 데 충분하다는 인상을 받았습니다 (잘못되었을 수 있음). 일부 Windows 응용 프로그램 (varchar *), 아무런 문제가 없습니다.
누구든지이 문제에 대해 의견을 개진 할 수 있습니까?
PHP의 beavior가에 PHP 7.1에서 변경, 정의 유니 코드로 구축하는 프로젝트를 변경하면 변화의 너무 큰 경우 https://stackoverflow.com/a/38466772/680382 – gogowitsch