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.Unicode
ANSI 파일을 읽지 않았 습니까?
예, 파일의 실제 인코딩, 아마도 유니 코드 일 수 있습니다. 유니 코드 인코딩의 가장 일반적인 형식이므로 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")을 사용했는데, 이는 아무런 문제없이 작동했습니다.
'IT Share you' 카테고리의 다른 글
.htaccess에서 cors 활성화 (0) | 2020.12.09 |
---|---|
파이썬에서 json 문자열을 객체로 역 직렬화 (0) | 2020.12.09 |
Play!를 사용하여 Java 클래스에서 application.conf 속성에 액세스 (0) | 2020.12.09 |
Pydoc으로 문서를 어떻게 만드나요? (0) | 2020.12.09 |
Automapper : ReverseMap () 및 ForMember ()를 사용한 양방향 매핑 (0) | 2020.12.09 |