문제

입력 파일에서 데이터를 읽을 때 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 코드 페이지를 인코딩하는 것입니다.

개인적으로 나는 이것이 속성 이름을 인코딩한다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top