WinRT目标多字节代码页中不存在Unicode字符的映射

Jar*_*zur 12 file-io datareader windows-8 windows-runtime

我试图在我的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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

但是,在行中抛出一个例外:

string text = dataReader.ReadString(numbytes);
Run Code Online (Sandbox Code Playgroud)

执行消息:

No mapping for the Unicode character exists in the target multi-byte code page.
Run Code Online (Sandbox Code Playgroud)

我怎么得到这个?

Jar*_*zur 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);
        }
Run Code Online (Sandbox Code Playgroud)

有人可以详细说明,为什么我最初的方法不起作用?


duD*_*uDE 5

试试这个而不是string text = dataReader.ReadString(numbytes):

dataReader.ReadBytes(stream);
string text = Convert.ToBase64String(stream);
Run Code Online (Sandbox Code Playgroud)