13

Windows 8 ストア アプリでファイルを読み込もうとしています。これを実現するために使用するコードの断片を次に示します。

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

例外メッセージ:

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

どうすればこれを手に入れることができますか?

4

3 に答える 3

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

なぜ私の最初のアプローチがうまくいかなかったのか、誰か詳しく教えてください。

于 2013-08-13T11:39:54.943 に答える
5

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

dataReader.ReadBytes(stream);
string text = Convert.ToBase64String(stream);
于 2013-08-13T10:37:30.887 に答える