StreamReader 문제 - 알 수없는 파일 인코딩 (Western ISO 88591)
-
21-08-2019 - |
문제
입력 파일에서 데이터를 읽을 때 StreamReader가 ¥ Symbom을 읽지 않았다는 것을 알았습니다. Mozilla Firefox는 입력 파일 유형을 Western (ISO-8859-1)으로 보여주었습니다.
인코딩 매개 변수를 사용한 후 다음 값에 대해 성공적으로 작동했습니다.
System.Text.Encoding.GetEncoding(1252) // (western iso 88591)
System.Text.Encoding.Default
System.Text.Encoding.UTF7
이제 "기본"설정을 사용할 계획이지만 이것이 올바른 결정인지 확실하지 않습니다. 기존 코드는 인코딩을 사용하지 않았으며 무언가를 깨뜨릴 수 있을까 걱정됩니다.
나는 인코딩에 대해 거의 (또는 오히려 아무것도) 잘 알고 있습니다. 이것에 대해 어떻게 가나 요? System.text.encoding.default Safe를 사용하기로 한 결정이 있습니까? 사용자에게 특정 형식으로 파일을 저장하도록 요청해야합니까?
해결책
코드 페이지 1252는 Iso-Latin-1과 동일하지 않습니다. Iso-Latin-1을 원한다면 사용하십시오 Encoding.GetEncoding(28591)
. 그러나 나는이 코드 포인트 (u+00a5)에 대해 동일 할 것으로 기대합니다. UTF-7은 완전히 다릅니다 (그리고 거의 사용하고 싶은 것은 거의 없습니다).
Encoding.Default
~이다 ~ 아니다 안전 - 대부분의 상황에서는 정말 나쁜 생각입니다. 실행중인 특정 컴퓨터에만 해당됩니다. 한 컴퓨터에서 다른 컴퓨터로 파일을 전송하는 경우 원래 컴퓨터를 인코딩하는 사람은 누가 알고 있습니까?
파일이 ISO-8859-1에 있다는 것을 알고 있다면 명시 적으로 사용하십시오. 이 파일을 생성하는 것은 무엇입니까? 사용자가 저장하는 경우 어떤 프로그램을 저장하고 있습니까? UTF -8이 옵션이라면 유니 코드 전체에 대처할 수 있기 때문에 일부는 좋은 것입니다.
나는있다 유니 코드에 관한 기사 그리고 또 다른 유니 코드 문제 디버깅 유용하다고 생각할 수 있습니다.
다른 팁
기존 코드는 인코딩을 사용하지 않았습니다
인코딩을 명시 적으로 지정하지 않았을 수 있으며,이 경우 인코딩이 encoding.utf8에 기본값이있을 수 있습니다.
이름 encoding.default는 이것이 Streamreader와 같은 클래스에서 사용하는 기본 인코딩이라는 인상을 줄 수 있지만 이것은 그렇지 않습니다. Jon Skeet가 지적했듯이 Encoding.default는 운영 체제의 현재 ANSI 코드 페이지를 인코딩하는 것입니다.
개인적으로 나는 이것이 속성 이름을 인코딩한다고 생각합니다.
당신은 소프트웨어 개발자입니까? Joel Spolsky 's를 읽는 것을 잊지 마십시오모든 소프트웨어 개발자가 절대적으로 절대적으로 최소한, 유니 코드 및 문자 세트에 대해 긍정적으로 알아야합니다 (변명 없음!)