Rea*_*rld 3 php c# mysql json.net uwp
我正在尝试从我的服务器传递数据并将其显示在UWP Windows应用程序中.数据存储在mySQL数据库中
这是通过PHP输出到这里的网页http://www.rwscripts.com/scorealerts/v3/request.php?action=getTeams使用此代码
// Serialize the data structure
$result = json_encode($data,JSON_PRETTY_PRINT);
// Display the XML document
header('Content-type: application/json; charset=utf-8');
print $result;
Run Code Online (Sandbox Code Playgroud)
然后我在我的应用程序中使用HttpWebRequest读取它,然后使用JSON.net反序列化JSON
JArray obj = JsonConvert.DeserializeObject(str.Trim()) as JArray;
if (obj == null || obj.Count == 0) return;
foreach (NotificationTeam nt in from JObject team in obj
select
new NotificationTeam
{
Title = team.Value<string>("teamName"),
TeamID = team.Value<int>("tid"),
Followers = team.Value<int>("followers")
})
{
nt.Notifications = ScoreManager.GetMgr().GetTeamNotification(nt.TeamID);
notificationTeams.Add(nt);
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中显示的输出是这样的
需要更改流的哪一部分才能正确显示unicode字符?
除了生成的json之外,你无法解决这个问题 - 因为它完全错误,原因如下:
Köln)中的特殊字符在数据库中存储为UTF-8.
ö在UTF-8中0xc3 0xb6.Encoding.Unicode在C#)这里是麻烦的开始.ö在UTF-16(和UTF-32)中0x00 0xf6.\u00c3而\u00b6不是仅仅\u00f6.因此,而不是一个UTF-8字符,你最终两个UTF-16字符(即代表两个字节相同的UTF-8字符的).\u转义序列并将它们(从它的角度完全正确)转换为两个单独的UTF-16字符(ö).长话短说,这就是你的字符串:
ö在UTF-32中f6000000
ö,UTF-16是f600
öUTF-83c b6
Köln (输入)K[0xc3][0xb6]ln (Sql UTF-8)K\u00c3\u00b6ln (Json UTF-8编码为UTF-16)Köln (C#UTF-16解码)由于json_encode需要一个UTF-8字符串,我怀疑问题发生在数据库和编码(php)之间.
这篇文章可能会提示您编码设置可能不一致的位置:
如果您需要修改设置,您需要的输出是:
"teamName": "1. FC K\u00f6ln"或者"teamName": "1. FC Köln"(也应该没问题)
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |