해결된 질문
작성
·
50
0
예제로 파일이름 바꿔가며 만들어보고 있는데, 메모장의 인코딩형식도 UTF-8로 바꿨는데 왜 이렇게 문자열뒤에 쓰레기값들이 찍히는건가요 ? 해결방법이 뭔지 알 수 있을까요 ? ㅠㅠ
답변 2
0
인코딩 형식이 아니라 쓰레기 값일 수 있습니다. 파일을 처음 생성하면 크기가 0입니다. 거기에 쓰기가 일어나면서 크기가 늘어납니다. 그러나 바이너리 모드로 파일을 열고 파일 크기를 임의로 늘린 경우 파일 쓰기는 현재 파일 포인터에서 일어납니다. 그리고 그 과정에서 파일 포인터가 위치한 곳에 정보를 덮어 씁니다. 이와 관련한 부분을 본인지 작성한 예제에서 살펴보시기 바랍니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. taehyun0222님.
파일을 저장할 때 문자 인코딩 문제로 인해 예기치 않은 문자들이 출력될 수 있습니다. 메모장의 인코딩을 UTF-8로 설정하셨다고 하셨지만, 코드나 파일을 처리하는 과정에서 인코딩 설정이 맞지 않을 수 있습니다.
일반적으로 이러한 문제가 발생하는 원인은 다음과 같습니다:
인코딩 불일치: 파일을 작성하거나 저장할 때 사용한 인코딩과, 이를 다시 열 때 사용하는 인코딩이 다를 수 있습니다. 컴파일 설정이나 파일 저장 시 다른 인코딩이 사용되었는지 확인해 보세요.
파일 끝에 쓰레기값: 메모리 맵핑 파일 사용 시, 남은 메모리 공간에 쓰레기 값이 포함될 수 있습니다. 실제로 필요한 데이터만큼 정확하게 파일을 읽고 쓸 수 있도록 코드에서 해당 부분을 처리해야 합니다.
관련 해결책으로는 다음과 같은 방법을 추천드립니다:
파일을 열기 전에 std::wstring
나 std::string
같은 적절한 문자열 클래스를 사용해서 파일을 읽고 직접 인코딩을 확인해 보세요.
C 혹은 C++ 코드를 사용하는 경우, 파일을 열 때 명시적으로 std::ios::binary
모드를 사용하는 것이 도움이 될 수 있습니다. 이 모드는 파일을 바이너리 모드로 여는 것으로, 인코딩 자동 변환을 방지해 주는 역할을 합니다.
fopen_s()
등의 함수로 파일 열기 시, 모드를 “rb”(Read Binary)로 설정해 주시면 불필요한 변환을 막을 수 있습니다.
이미지를 보니 문제가 발생한 상태가 확실히 드러나 있네요. 메모리 매핑 파일이나 다른 바이너리 데이터를 다룰 때 반드시 문자 인코딩 및 파일 모드를 일관되게 맞춰 주셔야 합니다. 이 외에 더 알고 싶으신 점이 있으면 질문해 주세요.
유사한 사례를 참고하실 수 있는 링크도 첨부합니다:
- 메모리 맵 강의 예제의 결과가 이상합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.