XmlDocument에로드되기 전에 XML 문자열의 UTF-8 바이트 표시를 확인하는 몇 가지 단위 테스트가 있습니다. 모든 것이 Windows 7 64 비트를 사용하여 잘 작동하지만 Windows 10 64 비트에서 실행하려고 시도하는 동안 실패한 테스트가 있음을 알게되었습니다.UTF-8 바이트 기호 검사는 운영 체제에 따라 다른 값을 제공합니다.
약간의 조사가 끝나면 Windows 10에서는 XML 문자열이 프 루닝되고 (프리앰블이 있음), Windows 7에서는 XML 문자열이 프 루닝됩니다. 여기
는 코드입니다 :public static string PruneUtf8ByteMark(string xmlString)
{
var byteOrderMarking = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
if (xmlString.StartsWith(byteOrderMarking))
{
xmlString = xmlString.Remove(0, byteOrderMarking.Length);
}
return xmlString;
}
StartsWith
윈도우 10 사실, 같은 XML 문자열을 사용하고 있는지 윈도우 7 참고 거짓을 반환, 유일한 차이점은 여기 운영 체제.
아이디어가 있으십니까? 두 PC 모두 동일한 .NET 버전을 실행하는 x64이기 때문에 여기서 약간 손실됩니다.
편집 : 바이트 마크 검사가 사실 때문에 기호가 잘립니다 덜보다 윈도우 10에
public static string XmlString = "<?xml version=\"1.0\"....
: 문자열을 통해 클래스에서 제공됩니다.
문자열의 출처는 무엇입니까? – SLaks
@SLaks 문자열은 더미 테스트 데이터에서 가져옵니다. 그것은 클래스에 래핑되고 public static을 통해 액세스 할 수있는 XML 문자열입니다. –
문자열이 파일에서 읽히지 않으면 믿을 수 없습니다. 어떤 값으로 'byteOrderMarking'에 대한 디버거가 표시됩니까? – dlatikay