.NET 3.5SP1에서 File.Copy()
이라는 이상한 동작이 나타났습니다. 그것이 버그인지 기능인지는 알 수 없습니다. 그러나 그것이 나를 미치게한다는 것을 압니다. 사용자 정의 빌드 단계에서 File.Copy()
을 사용하고 문자 인코딩을 엉망으로 만듭니다.File.Copy 및 문자 인코딩
UTF-8 인코딩 된 텍스트 파일을 통해 ASCII 인코딩 텍스트 파일을 복사 할 때 대상 파일은 여전히 UTF-8로 인코딩되지만 새 파일의 내용과 UTF-8에 대한 3 개의 접두사 문자가 추가됩니다. ASCII 문자는 괜찮지 만 ANSI 코드 페이지의 나머지 문자 (128-255)는 올바르지 않습니다.
다음은 재생산 코드입니다. 먼저 UTF-8 파일을 대상에 복사 한 다음 ANSI 파일을 동일한 대상에 복사합니다. Content of copy.txt : this is ASCII encoded:/Encoding: utf-8
File.WriteAllText("ANSI.txt", "this is ANSI encoded: é", Encoding.GetEncoding(0));
File.WriteAllText("UTF8.txt", "this is UTF8 encoded: é", Encoding.UTF8);
File.Copy("UTF8.txt", "copy.txt", true);
using (StreamReader reader = new StreamReader("copy.txt", true))
{
Console.WriteLine("Content of copy.txt : " + reader.ReadToEnd() + "/Encoding: " +
reader.CurrentEncoding.BodyName);
}
File.Copy("ANSI.txt", "copy.txt", true);
using (StreamReader reader = new StreamReader("copy.txt", true))
{
Console.WriteLine("Content of copy.txt : " + reader.ReadToEnd() + "/Encoding: " +
reader.CurrentEncoding.BodyName);
}
이런 일이 발생하는 이유 어떤 아이디어 : 두 번째 콘솔 출력의 출력을 주목하라? 내 코드에 실수가 있습니까? 정확한 ANSI/ASCII 혼란
문제는 StreamReader가 아닙니다. 문제를 재현 할 수있는 짧은 코드를 만드는 데만 사용했습니다. (그리고 내가 ASCII와 ANSI를 혼동하고 혼란스러워하면서 놀랐다.) 처음에는 16 진수 편집기에서 알아 차렸고 UTF-8 바이트 순서 표시 (시작 부분에 3 바이트)와 악센트 부호가있는 문자의 잘못된 문자 코드가 있기 때문에 결과 파일이 올바르지 않습니다. – chris166
뭔가 이상합니다. 나는 그것을 더 이상 재현 할 수 없다. 그래서 뭔가가 구식이었습니다 (16 진수 편집기, VS 코드 등). 어쨌든, 문제를 조사하고 그것에 많은 시간을 보내 주셔서 감사합니다! – chris166
나의 기쁨 - 정말로 이것이 답변을 타이핑하는 것보다 많은 시간을 들이지는 않았지만. 때때로 다른 질문들이 * 많은 * 노력을 덜어주었습니다 :) –