【问题标题】:No mapping for the Unicode character exists in the target multi-byte code page on Windows App SaveWindows 应用保存的目标多字节代码页中不存在 Unicode 字符的映射
【发布时间】:2020-04-25 23:00:18
【问题描述】:

我有一个作为 AppPackage 部署的 UWP 应用,当我尝试读取/保存 LocalState 文件夹中的文件时,我看到了关闭错误。它不会每次都发生,所以我认为文件在某个时候在此过程中被锁定。错误是

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

以及引发错误的代码

private const string SETTINGS_FILENAME = "settings.json";
private static readonly StorageFolder _settingsFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
public async static Task<ConfigWrapper> LoadSettings()
{
    try
    {
        StorageFile sf = await _settingsFolder.GetFileAsync(SETTINGS_FILENAME);
        if (sf == null) return null;

        string content = await FileIO.ReadTextAsync(sf, Windows.Storage.Streams.UnicodeEncoding.Utf8);
        return JsonConvert.DeserializeObject<ConfigWrapper>(content);
    }
    catch (Exception e)
    {
        DiagnosticsClient.TrackException(e);
        return null;
    }
}

public async static Task<bool> SaveSettings(ConfigWrapper data)
{
    try
    {
        StorageFile file = await _settingsFolder.CreateFileAsync(SETTINGS_FILENAME, CreationCollisionOption.ReplaceExisting);
        string content = JsonConvert.SerializeObject(data, Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings { });
        await FileIO.WriteTextAsync(file, content, Windows.Storage.Streams.UnicodeEncoding.Utf8);
        return true;
    }
    catch (Exception e)
    {
        DiagnosticsClient.TrackException(e);
        return false;
    }
}

我确保以 UTF-8 格式保存和读取文件,所以我不确定为什么会出现编码错误。保存/读取时我需要做些什么(例如锁定文件)吗?

【问题讨论】:

  • 请找到一种方法以十六进制转储有问题的文本。
  • 您想要不可读的文件?这是之前和之后
  • “之前”文件不是 JSON,不是 unicode,不是混乱的 UTF-8,不是十六进制,不是我认识的任何东西。如果您在 Unix 服务器上运行,请执行 file filename 以查看它是否可以通过其“魔法”推断出它是什么。
  • 之前的文件是json文件,你说它不是什么?

标签: c# wpf encoding appx


【解决方案1】:

许多应用程序以专有格式保存数据。你提供的废话大概就是这样。

此类应用程序通常具有“写入”或“导出”或“另存为”数据的方法。寻找这样的。

【讨论】:

  • 我自己在代码中将文件另存为 utf8 json。它正在以某种方式损坏
  • @IsaacLevin - 你能“打印”它和/或以十六进制转储它的开头吗?
  • 打印什么?文件格式永远不应该改变。但偶尔当我查看它之后的文件时,它不是 json。我正在尝试找出是什么原因造成的。
猜你喜欢
  • 2017-03-21
  • 2013-08-14
  • 2014-08-05
  • 2014-11-21
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2016-06-13
相关资源
最近更新 更多