내 응용 프로그램에 boost::filesystem
의 래퍼를 만듭니다. 파일 이름에 비 ASCII 문자가 있으면 어떻게 될지 조사하고 있습니다.`char`와 2 바이트 문자 사이에서 파일 이름은 어떻게 작동합니까?
Windows에서 the documentation은 모든 문자가 wchar_t
이라고 말합니다. 그것은 매우 이해할 만하고 일관된 것입니다.
그러나 Linux의 경우 the documentation은 모든 문자가 !라고 말합니다. 그래서 1 바이트 문자. 궁금 해서요, 심지어 비 ASCII 문자를 읽고 작동합니까? 그래서 나는 아랍어 이름 تجريب
(5 글자 단어)을 가진 디렉토리를 만들고 boost::filesystem
으로 읽습니다. 나는 터미널에서 그것을 인쇄했다. 그리고 그것은 잘 작동했다. (터미널과 터미네이터는 별개로 왼쪽에서 오른쪽으로 잘못 썼다.) 터미널에서 인쇄 된 결과는 다음과 같습니다.
/mnt/hgfs/D/تجريب
무언가가 더해지지 않습니다. 어떻게 이것이 1 바이트 char
문자열 일 수 있으며 여전히 아랍어 이름을 인쇄 할 수 있습니까? 그래서 나는 다음과 같은 한 :
std::for_each(path.string().begin(), path.string().end(), [](char c) {
std::cout<<c<<std::endl;
});
그리고이 path
내가 위에서 언급 한 디렉토리입니다 준 실행했다 :
/
m
n
t
/
h
g
f
s
/
D
/
�
�
�
�
�
�
�
�
�
�
그리고이 시점에서
, 나는 정말, 정말 잃었어요. 아랍어 단어는 10 바이트로 5 글자 단어를 만듭니다.여기 내 질문이 있습니다. : 문자의 일부는 1 바이트이고 문자의 일부는 2 바이트입니다. 리눅스는 2 문자가 단일 2 바이트 문자라는 것을 어떻게 알 수 있습니까? 이것은 파일 시스템을 위해 리눅스에서 2 바이트 문자를 가질 필요가 없다는 뜻입니까? char
은 모든 언어에 적합합니까?
누군가가 어떻게 작동하는지 설명해주세요.
어떻게'/ mnt/hgfs/D/تجريب' 출력을 생성 했습니까? 'ls' 사용하기? –
[UTF-8] (https://en.wikipedia.org/wiki/UTF-8)입니다. – Fanael
@ πάνταῥεῖ'std :: cout << 경로 << std :: endl;' –