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

前端 未结 3 1651
萌比男神i
萌比男神i 2021-01-04 08:15

I am trying to read a file in my Windows 8 Store App. Here is a fragment of code I use to achieve this:

        if(file != null)
        {
            var st         


        
相关标签:
3条回答
  • 2021-01-04 08:27

    I managed to read file correctly using similar approach to suggested by 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);
            }
    

    Can somebody please elaborate, why my initial approach didn't work?

    0 讨论(0)
  • 2021-01-04 08:41

    If, like me, this was the top result when search for the same error regarding UWP, see the below:

    The code I had which was throwing the error (no mapping for the unicode character exists..):

      var storageFile = await Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.GetFileAsync(fileToken);
            using (var stream = await storageFile.OpenAsync(FileAccessMode.Read))
            {
                using (var dataReader = new DataReader(stream))
                {
                    await dataReader.LoadAsync((uint)stream.Size);
                    var json = dataReader.ReadString((uint)stream.Size);
                    return JsonConvert.DeserializeObject<T>(json);
                }
            }
    

    What I changed it to so that it works correctly

         var storageFile = await Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.GetFileAsync(fileToken);
            using (var stream = await storageFile.OpenAsync(FileAccessMode.Read))
            {
                T data = default(T);
                using (StreamReader astream = new StreamReader(stream.AsStreamForRead()))
                using (JsonTextReader reader = new JsonTextReader(astream))
                {
                    JsonSerializer serializer = new JsonSerializer();
                    data = (T)serializer.Deserialize(reader, typeof(T));
                }
                return data;
            }
    
    0 讨论(0)
  • 2021-01-04 08:45

    Try this instead of string text = dataReader.ReadString(numbytes):

    dataReader.ReadBytes(stream);
    string text = Convert.ToBase64String(stream);
    
    0 讨论(0)
提交回复
热议问题