IT Share you

StreamReader를 사용하여 외국 문자 읽기 C # 도움말

shareyou 2020. 12. 9. 21:59
반응형

StreamReader를 사용하여 외국 문자 읽기 C # 도움말


아래 코드를 사용하여 외국 문자가 포함 된 텍스트 파일을 읽고 있는데, 파일은 ANSI로 인코딩되고 메모장에서 잘 보입니다. 아래 코드는 작동하지 않습니다. 파일 값을 읽고 데이터 그리드에 표시 할 때 문자가 사각형으로 나타납니다. 다른 문제가있을 수 있습니까?

StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.ANSI);
using (reader = File.OpenText(inputFilePath))

감사

업데이트 1 :에서 찾은 모든 인코딩을 시도했습니다 System.Text.Encoding. 모두 파일을 올바르게 표시하지 못합니다.

업데이트 2 : 파일 인코딩 (파일을 다시 저장)을 유니 코드로 변경하고 사용 System.Text.Encoding.Unicode했는데 제대로 작동했습니다. 그렇다면 메모장이 올바르게 읽은 이유는 무엇입니까? 그리고 왜 System.Text.Encoding.UnicodeANSI 파일을 읽지 않았 습니까?


예, 파일의 실제 인코딩, 아마도 유니 코드 일 수 있습니다. 유니 코드 인코딩의 가장 일반적인 형식이므로 UTF-8을 사용해보십시오. 그렇지 않으면 파일 ASCII가 표준 ASCII 인코딩이 작동합니다.


현재 시스템의 ANSI 코드 페이지를 사용하는 기본 인코딩을 시도 할 수도 있습니다.

StreamReader reader = new StreamReader(inputFilePath, Encoding.Default, true)

원본 파일에 메모장 "다른 이름으로 저장"메뉴를 사용하려고 할 때 인코딩 콤보 상자를 살펴보십시오. 파일이 추측 한 인코딩 메모장을 알려줍니다.

또한 ANSI 파일 인 경우 detectEncodingFromByteOrderMarks 매개 변수가별로 도움이되지 않을 것입니다.


나는 같은 문제가 있었고 내 해결책은 간단했습니다.

Encoding.ASCII

사용하다

Encoding.GetEncoding("iso-8859-1")

여기에서 답을 찾았 습니다 .

편집 : 더 많은 솔루션. 이것은 아마도 더 정확한 것입니다.

Encoding.GetEncoding(1252);

또한 경우에 따라 OS 기본 인코딩이 파일 인코딩과 일치하는 경우에도 작동합니다.

Encoding.Default;

Encoding.Unicode는 JPEG 디코더가 GIF 파일을 이해하지 못하는 것과 같은 방식으로 ANSI 파일을 정확하게 디코딩하지 않습니다.

나는 그 놀랐어요 Encoding.Default정말 경우 ANSI 파일에 대한 작업을하지 않았다 이었다 혹시 정확히 알 경우 - ANSI가 있는 코드 페이지 메모장을 사용했다, 당신은 사용할 수 있습니다 Encoding.GetEncoding(int).

일반적으로 가능한 경우 UTF-8을 사용하는 것이 좋습니다.


Encoding.UTF8과 같은 다른 인코딩을 시도하십시오. StreamReader가 인코딩 자체를 찾도록 할 수도 있습니다.

    StreamReader reader = new StreamReader(inputFilePath, System.Text.Encoding.UTF8, true)

편집 : 방금 업데이트를 보았습니다. StreamReader가 추측을하도록하십시오.


File.OpenText ()는 항상 UTF-8 StreamReader를 암시 적으로 사용합니다. 대신 고유 한 StreamReader 인스턴스를 만들고 원하는 인코딩을 지정합니다. 처럼

using (StreamReader reader =  new StreamReader(@"C:\test.txt", Encoding.Default)
 {
 // ...
 }

포르투갈어 문자 읽기 문제를 해결하고 메모장 ++에서 소스 파일을 변경했습니다.

여기에 이미지 설명 입력

씨#

    var url = System.Web.HttpContext.Current.Server.MapPath(@"~/Content/data.json");
    string s = string.Empty;
    using (System.IO.StreamReader sr = new System.IO.StreamReader(url, System.Text.Encoding.UTF8,true))
    {
          s = sr.ReadToEnd();
    }

아랍어의 경우 Encoding.GetEncoding(1256). 잘 작동합니다.


스웨덴어 Å Ä Ö의 경우 위의 작업에서 유일한 해결책은 다음과 같습니다.

Encoding.GetEncoding("iso-8859-1")

바라건대 이것은 누군가의 시간을 절약 할 것입니다.


또한 프랑스어와 독일어가 포함 된 내 보낸 파일을 읽고 있습니다. 저는 Encoding.GetEncoding ( "iso-8859-1")을 사용했는데, 이는 아무런 문제없이 작동했습니다.

참고 URL : https://stackoverflow.com/questions/592824/c-sharp-help-reading-foreign-characters-using-streamreader

반응형