일단 ai 물어봐도 이상한 대답만 하네
c/c++ 예로들면
char* p = "asdf";
이렇게 하면 널 포함 5바이트 할당되고
p[1] == 's'
이잖아
근데 소스파일 자체를 2바이트 고정 인코딩 utf16 같은걸로하면
저거 8바이트 할당 될 수 있음?
그래서 p[1] 해도 's' 가 안나올 수 있나??
실험해봤는데 어떤 인코딩으로 하던 1바이트씩되던데
한글이나 다른 문자는 소스코드 파일 인코딩에 따라 달라지고
왜 그런거지? 왜 영어는 계속 1바이트로 할당될까
소스코드의 인코딩을 지랄내놓으면 컴파일러가 소스를 못 읽는 일이 생길 순 있는디 결과물엔 영향이 안감
ㅇㅇ 근데 알파뱃은 왜 계속 1바이트로 압축되는거지? 그렇게 하라는 표준이 있나? vc++ 에서 실험중인데 파일 인코딩만 건드렸고, 어떠한 컴파일 옵션도 안줬는데
아닝머라능거잉 c엉어에성 문자열할당하명 아스키로할당되징 - dc App
아스키할당이니깡 한문자당 항상 1바이트양 - dc App
그리공 한글로하명 아스키로표현못하니까 유니코드 2바이트씩할당되겟징 - dc App
소스코드 파일 자체가 어떤 인코딩으로 된건지 상관없이 알파뱃은 무조건 아스키 할당으로 압축되는거임? 다른 언어는 소스코드 파일 자체 인코딩에 따라 달라져서 왜 알바뱃만 그런건지 궁금햇음
@ㅇㅇ(124.57) 니가 말하능 “소스코드파일 자체인코딩”이 뭘 뜻하는지 설명해봥 - dc App
@ㅇㅇ(124.57) 파일이랑 소스코드랑 다른겅 용어혼동없이 명확히말해방 - dc App
파일이랑 소스코드 인코딩이 다른거야?? 몰랏네 내가 지금 말하는 인코딩은 notepa++로 코드열고 파일 인코딩 선택하는거 있잖아 소스코드.cpp 파일 자체 인코딩
@ㅇㅇ(124.57) 내말응 char *p = “asdf”;이걸 컴파일러가읽는숭강 영어리터럴인걸 인지하공 아스키인코딩으로 한다능거 a s d f각각 0x41 0x?? 0x?? 0x?? 마지막은 0x00(널) 이렇게메모리엥 - dc App
@ㅇㅇ(124.57) 낭 그렁기능 본적없능댕? - dc App
@ㅇㅇ(124.57) 내가말하능 파일응 파일디스크립터말하능거 소스코드능 언어문법적용한 스트링말하능거공 - dc App
char는 1바이트라 저 코드 실행결과가 달라질 일은 없을거같은데?
wchar_t 쓰는거 아닌이상 ㅇㅇ 소스코드 인코딩은 저거랑 상관이 없지
인코딩을 바꿀 게 아니라 자료형을 바꾸셈
https://en.cppreference.com/w/c/header/uchar.html
소스파일 인코딩 변경은 그냥 소스파일 텍스트 얘네를 다르게 읽는거에 불과하지.. 어차피 텍스트파일 자체에 저장된 0과 1 비트패턴은 그대로고 그걸 어떻게 읽느냐를 정하는게 인코딩일 뿐이고. 결국 핵심적인 소스의 논리는 그대로인데 인코딩 암만 바꿔봤자 컴파일하면 결과물은 같지.
근데 왜 다른문자셋은 파일 인코딩에 따라 달라짐? 알파뱃만 그렇게 하라는 규정이 있음?
너가한건 소스코드란 파일 자체를 어떻게 저장할지 명시한거고 병신아 컴파일러는 똑같은 코드로 보겠지
근데 왜 다른문자셋은 파일 인코딩에 따라 달라짐? 아스키 문자셋 경우는 1바이트로 하라는 규정이 있음?
'너가'따위로 쓰는 병신새끼가 잘도 짖네
추가로 컴파일러는 그러면 모든 인코딩 대응하도록 처리함? 지금 테스트해봤는데 개씹 마이너한 인코딩도 아스키는 1바이트 처리되고 다른 문자는 파일 인코딩에 따라 달라지고 있는데?
고정크기 인코딩도 테스트 해봤고 a가 97이 아닌 인코딩도 해봤고
웬만하면 대응하고 컴파일러에 옵션 줘서 특정 방식으로 디코딩 하라고 명시할수도 있음
근데 아스키표는 char로 대응하라는 스펙이 어디 있음?
@ㅇㅇ(124.57) 니가 파일을 어떻게 저장했냐는 어차피 디코딩해서 해석하기 때문에 그렇게 크게 영향을 안끼침 모든 유니코드는 아스키 캐릭터셋을 하위호환하게 만들어져있고 컴파일러 입장에서도 따로 명시하지 않은 이상 1byte로 표현 가능한걸 2byte로 넣을 필요가 없어서 1byte로 저장하는거지
char s[] = "안녕하세요"; 이거 컴파일 안되는거 확인 ㄱ 그리고 나서 ai한테 물으면 잘 설명해줄거임 char 랑 유니코드 대응 타입이랑
그리고 윈도우 플밍에서 와이드char/멀티바이트char 관련해서 어떻게 지원하는지도 알아보고 UTF8, UTF16도 알아보면 좋을 거 같음
컴파일러에 따라서도 문자열 처리가 달라짐. GCC의 경우 텍스트 인코딩이 UTF-8이면 char 문자열의 인코딩도 UTF-8인데 MSVC는 /utf-8 옵션이 없으면 시스템 로케일로(대표적으로 EUC-KR) 변환시킴. 다른 케이스로 텍스트 인코딩이 비 UTF-8일 경우 GCC는 그냥 char 문자열 인코딩도 비 UTF-8이 되고, MSVC는 시스템 로케일 인코딩로 변환시킴.