2013-08-13 16 views
11

Windows 8 Store Uygulamamdaki bir dosyayı okumaya çalışıyorum. İşte kod parçasıdır ben bunu başarmak için kullanmaktır:WinRT Hedef çoklu bayt kod sayfasında Unicode karakteri için eşleşme yok

Ancak, exeption hattında atılır
 if(file != null) 
     { 
      var stream = await file.OpenAsync(FileAccessMode.Read); 
      var size = stream.Size; 
      using(var inputStream = stream.GetInputStreamAt(0)) 
      { 
       DataReader dataReader = new DataReader(inputStream); 
       uint numbytes = await dataReader.LoadAsync((uint)size); 
       string text = dataReader.ReadString(numbytes); 
      } 
     } 

:

string text = dataReader.ReadString(numbytes); 

exeption mesajı:

No mapping for the Unicode character exists in the target multi-byte code page. 

nasıl tarafından alabilirim bu?

+1

Sıra dışı, WinRT'nin hala çok baytlı kodlamayı işlediğini düşünmedim. Bununla birlikte, düzgün bir şekilde kodlanmamış bir metin dosyasına işaret eder. –

cevap

19

Doğru benzer bir yaklaşım kullanarak dosyayı okumak başardı Dude önerdiği için: benim ilk yaklaşım değil niye

 if(file != null) 
     { 
      IBuffer buffer = await FileIO.ReadBufferAsync(file); 
      DataReader reader = DataReader.FromBuffer(buffer); 
      byte[] fileContent = new byte[reader.UnconsumedBufferLength]; 
      reader.ReadBytes(fileContent); 
      string text = Encoding.UTF8.GetString(fileContent, 0, fileContent.Length); 
     } 

Biri, ayrıntılı misiniz iş?

+0

Not Defteri'ni ASCII kodlamasını "?" Olarak kaydet char Çince iken.Ve Encoding.ASCII.GetString'.Can yardım deneyin? – lindexi

+0

@lindexi ASCII kodlaması Çince karakterleri desteklemiyor. Daha fazla bilgi [burada] (https://en.wikipedia.org/wiki/ASCII) –

+0

@Mazur, thx, Bu GBK.I not defteri kaydetmek ascii ve GBK kullanın. – lindexi

4

string text = dataReader.ReadString(numbytes) yerine bu deneyin:

dataReader.ReadBytes(stream); 
string text = Convert.ToBase64String(stream);