【问题标题】:No mapping for the Unicode character Exception没有 Unicode 字符的映射异常
【发布时间】:2016-05-10 14:13:39
【问题描述】:

C#Windows Phone SDK 中我得到了这个异常:“WinRT 信息:目标多字节代码中不存在 Unicode 字符的映射页。”。

我在一些 Pivot Application for Windows Phone 8 上做,我需要带有信息的 json 文件,其中包含 'á' 或 'ý' 等字符。我怎样才能毫无例外地添加这些字符?

这是方法,异常在哪里:

private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)        
{  
            // TODO: Create an appropriate data model for your problem domain to replace the sample data
            var sampleDataGroup = await SampleDataSource.GetGroupAsync("Group-1");
            this.DefaultViewModel[FirstGroupName] = sampleDataGroup;
}

json 文件看起来像这样:

{"Groups":[
  {
    "UniqueId": "Group-1",
    "Title": "Group Title: 1",
    "Subtitle": "Group subtitle: 1",
    "ImagePath": "Assets/DarkGray.png",
    "Description" : "Group Description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus tempor scelerisque lorem in vehicula. Aliquam tincidunt, lacus ut sagittis tristique, turpis massa volutpat augue, eu rutrum ligula ante a ante",
    "Items":
    [
      {
        "UniqueId": "Group-1-Item-1",
        "Title": "ý" /* !!!!this is the problem!!!! */,
        "Subtitle": "Item Subtitle: 1",
        "ImagePath": "Assets/LightGray.png",
        "Description" : "Item Description: Pellentesque porta, mauris quis interdum vehicula, urna sapien ultrices velit, nec venenatis dui odio in augue. Cras posuere, enim a cursus convallis, neque turpis malesuada erat, ut adipiscing neque tortor ac erat.",
        "Content" : "Curabitur class aliquam vestibulum nam curae maecenas sed integer cras phasellus."
      },

【问题讨论】:

  • 这里大概涉及到一些代码——你能提供一个minimal reproducible example吗?
  • 1) 你用什么序列化器来反序列化你的 JSON?你能告诉我们读取和反序列化它的代码吗? 2) JSON 允许转义 Unicode 字符。如果将"ý" 替换为"\u00fd" 会怎样?

标签: c# json windows-phone-8 unicode


【解决方案1】:

感谢 \u00fd 工作!顺便说一句,序列化程序是 Windows Phone SDK 中的默认值:

private async Task GetSampleDataAsync()
        {
            if (this._groups.Count != 0)
                return;

            Uri dataUri = new Uri("ms-appx:///DataModel/SampleData.json");

            StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
            string jsonText = await FileIO.ReadTextAsync(file);
            JsonObject jsonObject = JsonObject.Parse(jsonText);
            JsonArray jsonArray = jsonObject["Groups"].GetArray();

            foreach (JsonValue groupValue in jsonArray)
            {
                JsonObject groupObject = groupValue.GetObject();
                SampleDataGroup group = new SampleDataGroup(groupObject["UniqueId"].GetString(),
                                                            groupObject["Title"].GetString(),
                                                            groupObject["Subtitle"].GetString(),
                                                            groupObject["ImagePath"].GetString(),
                                                            groupObject["Description"].GetString());

                foreach (JsonValue itemValue in groupObject["Items"].GetArray())
                {
                    JsonObject itemObject = itemValue.GetObject();
                    group.Items.Add(new SampleDataItem(itemObject["UniqueId"].GetString(),
                                                       itemObject["Title"].GetString(),
                                                       itemObject["Subtitle"].GetString(),
                                                       itemObject["ImagePath"].GetString(),
                                                       itemObject["Description"].GetString(),
                                                       itemObject["Content"].GetString()));
                }
                this.Groups.Add(group);
            }
        }

【讨论】:

    猜你喜欢
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 2013-02-17
    • 1970-01-01
    • 2011-08-20
    相关资源
    最近更新 更多