userInfo NSDictionary 中的德语元音变音/特殊字符

German Umlaut / Special characters in userInfo NSDictionary

我目前设置了一个从 Amazon SNS 接收推送消息的应用程序(运行良好)。 在 PHP 方面,我使用了一个正常的 JSON-类似的有效负载,如下所示:

'aps' => array(
                    'content-available' => 1,
                    'alert' => array('body' => 'Text with or without Umlaut (ÄÖÜ)'),
                    'badge' => 1,
                    'sound' => 'default'
                )

所以我的问题是:如果我发送包含元音变音符号 (Ä,Ö,Ü) 的通知,则上部的 Push Badge 会在收到此消息后正确显示文本。 但是,我的应用程序没有:它接收 。 我以正常的 didreceveive 方式处理消息...

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

所以我将收到的 userInfo 字典记录为该方法中的第一件事,在这里我收到了:

NSLog(@"userInfo=%@",userInfo);


alert =         {
        body = "<null>";
    };
    badge = 1;
    "content-available" = 1;
    sound = default;

没有变音符号 - 它工作正常! 对此没有任何问题,这就是为什么我现在很感激任何意见...

提前致谢!

看看这个 article on Whosebug。我 post 的两个解决方案都有一些评论。希望对你有帮助。

解决方案一:

您可以使用 utf-8 字符集定义文档类型(如在对 qour 问题的评论中所写):

<?php header('Content-Type: application/json; charset=utf-8'); ?>

确保所有内容都是utf_encoded。 JSON 仅适用于 utf-8!

function encode_items(&$item, $key)
{
    $item = utf8_encode($item);
}
array_walk_recursive($rows, 'encode_items');

方案二:

另一个解决方案是使用 htmlentities().

<?php
    $test = array( 'bla' => 'äöü' );
    $test['bla'] = htmlentities( $test['bla'] );

    echo json_encode( $test );
?>