2013-07-08 3 views
2

저는 몇 시간 동안 성공하지 못했습니다.VB.net 잘못된 인코딩을 사용하여 XML 파일 읽기

나는 XML 파일 (프로그램에서 생성)을 가지고 있으며, 정보를 얻고 싶다. 내 문제는 파일의 헤더가 UFTF-8이지만 파일이 유니 코드로 인코딩 된 것입니다! VB.net XmlTextReader가 해당 파일을 읽지 않습니다 ...!? 그것이 "Load"에 도착하자마자, 그것은 예외와 함께 주위에 던졌습니다. 그런 다음 수천 개의 XML 파일 중 하나를 Notepad ++에서 열어 UFT-8로 저장했습니다. 그 파일은 작동했습니다!

하지만 우리 서버의 모든 파일을 변경하고 싶지는 않습니다. 새로운 파일은 매일 추가됩니다. 개발자가 XML 파일을 저장하는 방법을 변경할 수 있다고 생각하지 않습니다.

VB.net에서 "속임수"를 사용하여 이러한 파일을 읽는 방법에 대한 아이디어가 있습니까?

감사합니다. 당신이 더 진보 된 방식의 메모리

Dim Stream As New IO.StreamReader("File.xml", System.Text.Encoding.UTF8) 
Dim Reader As New Xml.XmlTextReader(Stream) 

로 파일을 읽을 때

+0

감사합니다. 그러나 트릭을하는 방법을 모른다 .net? – gilu

+0

감사합니다, Yve! 집에 갈 시간이라고 생각합니다! 결국 4 시가되었습니다! ;) 땀을 흘리지 마라 !! 내일 다시 올게. – gilu

답변

2

당신은 인코딩을 변경할 수 있습니다, 먼저 파일의 인코딩을 감지하고 다음을 변경하려고 할 수 있습니다.

+0

감사합니다. 메르시! 단케! 그레지! 방금 ​​전에 저를 구 했어요 !!! 나는 그것이 쉽지 않았다고 믿을 수 없다! – gilu

1

먼저 dodgy XML을 bytearray로 읽어야합니다. 그런 다음 문자 인코딩을 지정하는 문자열로 변환합니다. 그래서

Using fsSource As FileStream = New FileStream(pathSource, _ 
     FileMode.Open, FileAccess.Read) 
     ' Read the source file into a byte array. 
      Dim bytes() As Byte = New Byte((fsSource.Length) - 1) {} 
      Dim numBytesToRead As Integer = CType(fsSource.Length,Integer) 
      Dim numBytesRead As Integer = 0 

      While (numBytesToRead > 0) 
       ' Read may return anything from 0 to numBytesToRead. 
       Dim n As Integer = fsSource.Read(bytes, numBytesRead, _ 
        numBytesToRead) 
       ' Break when the end of the file is reached. 
       If (n = 0) Then 
        Exit While 
       End If 
       numBytesRead = (numBytesRead + n) 
       numBytesToRead = (numBytesToRead - n) 

      End While 
     numBytesToRead = bytes.Length 

     Dim strText As String = System.Text.Encoding.GetEncoding(1252).GetString(bytes) 
    End Using 

내가 여기에 윈도우 1252을 사용하고 있지만, 혹시 그 파일은 인코딩 무엇을 그 변경해야합니다 같은

.

+0

당신의 노력에 감사드립니다! 하지만 웬일인지, 나는 아직도 유효하지 않은 캐릭터를 가지고있다. ...!? – gilu