Flutter 개발 상자

[Flutter] FileSystemException: Failed to decode data using encoding 'utf-8' 해결 본문

Flutter/오류해결

[Flutter] FileSystemException: Failed to decode data using encoding 'utf-8' 해결

망고상자 2024. 1. 4. 15:38
728x90

에러 분석

 

위 에러는 UTF-8 인코딩 형식이 아닌 파일을 UTF-8 형식으로 읽고 쓰려고 했기 때문에 발생하는 에러이다. 위의 사진에서 알 수 있듯이 플러터는 txt 파일을 읽고쓸때 매개변수를 받지 않으면 기본적으로 UTF-8 형식을 사용한다. 따라서 다른 인코딩 형식의 파일을 읽고 싶다면 encoding 매개변수에 알맞는 인코딩 형식을 넣어주어야 한다.

 

 

파일 인코딩 형식 확인

 

MAC 기준 아래의 명령어를 터미널에서 실행

file -I 파일경로(확장자포함)

 

 

전 분명 UTF-8로 인코딩 했는데 왜 자꾸 인코딩이 잘못되는거죠?

 

UTF-8 인코딩 형식으로 파일을 쓸때 UTF-8 인코딩으로 처리할 수 없는 문자가 들어가게 되면 인코딩이 깨져버리게 된다.

��

 

웹사이트에서 위와 같은 문자를 본적이 있는가?

출처 : 위키백과

 

웹사이트에서는 보통 저런 UTF-8로 읽을 수 없는 문자일 경우 대체문자라는걸 통해서 보여주게 된다. 흔히 말하는 깨진 문자다.

 

문제는 플러터에서는 따로 설정을 해주지 않으면 처리할 수 없는 문자가 들어갔을때 대체 문자를 사용하지 않고 그대로 글의 제목과 같은 에러가 발생하게 된다.

 

따라서 혹시나 모를 에러에 대비하여 문자를 쓰고 읽을때는 다음과 같은 옵션을 추가해주자.

 

await file!.writeAsString(
          '문자삽입',
          // allowMalformed 옵션을 true로 주면 처리할 수 없는 문자를 대체문자로 표현해준다!
          encoding: const Utf8Codec(allowMalformed: true),
        );

 

 

 

요약

  • 대체문자는 텍스트 파일의 현재 인코딩 형식으로 처리할 수 없는 문자열을 대체하여 보여주는것
  • 플러터에서는 기본적으로 대체문자 옵션이 false로 되어있기 때문에 제목과 같은 에러가 발생할 수 있다.
728x90