我试图从我的服务器传递数据并将其显示在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;
然后我在我的应用程序中使用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);
}
我的应用程序中显示的输出是这样的
需要更改哪部分流才能正确显示unicode字符?
答案 0 :(得分:5)
除了生成的json之外,你无法解决这个问题 - 因为它完全错误,这就是原因:
Köln
)在数据库中存储为UTF-8。
UTF-8中的ö
为0xc3
0xb6
。Encoding.Unicode
)
这是麻烦开始的地方。 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-8中的ö
为3c
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"
(也应该没问题)
答案 1 :(得分:0)
而不是这个..
exe
..也许这个..?
$result = json_encode($data,JSON_PRETTY_PRINT);
..或两者..?
$result = json_encode($data,JSON_UNESCAPED_UNICODE);
答案 2 :(得分:0)
我相信您需要获取Unicode
个字符的字节并将其转换为String
。
var bytes = Encoding.Unicode.GetBytes(NotificationTeam.Title);
NotificationTeam.Title = Encoding.ASCII.GetString(bytes);
OR
new NotificationTeam
{
Title = Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(team.Value<string>("teamName"))),
TeamID = team.Value<int>("tid"),
Followers = team.Value<int>("followers")
})
答案 3 :(得分:0)
这可能是由于.NET Connector中的错误所致。在这种情况下,您应该指定
character_set_server=utf8mb4
在配置中或mysqld参数中的[--character-set-server=utf8mb4][1]