2013-08-13 29 views
11

Windows 8 Store Appでファイルを読み取ろうとしています。ここで私はこれを達成するために使用したコードの断片である:WinRTターゲットマルチバイトコードページにUnicode文字のマッピングがありません

 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); 
      } 
     } 

はしかし、exeptionはラインでスローされます。

string text = dataReader.ReadString(numbytes); 

Exeptionメッセージ:

私はで取得するにはどうすればよい
No mapping for the Unicode character exists in the target multi-byte code page. 

をこの?

+1

珍しいことに、私はWinRTがまだマルチバイトエンコーディングを処理しているとは思わなかった。ただし、正しくエンコードされていないテキストファイルを指しています。 –

答えて

19

私が正しく同様のアプローチを使用してファイルを読み込むために管理DUDEによって提案に:私の最初のアプローチはしなかった理由を

 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); 
     } 

は、誰かが、手の込んだてくださいすることができ作業?

+0

メモ帳のASCIIコードを "?" charは中国語です。そして、私は 'Encoding.ASCII.GetString'を試します。助けてもらえますか? – lindexi

+0

@lindexi ASCIIエンコーディングは中国語文字をサポートしていません。 More info [here](https://en.wikipedia.org/wiki/ASCII) –

+0

@Mazur、thx、それはGBKです。私はメモ帳を使用してasciiを保存し、GBKです。 – lindexi

4

string text = dataReader.ReadString(numbytes)の代わりにこれを試してみてください:

dataReader.ReadBytes(stream); 
string text = Convert.ToBase64String(stream); 
関連する問題