【问题标题】:NSString crash when I don't have emoji in my string当我的字符串中没有表情符号时,NSString 崩溃
【发布时间】:2016-12-21 17:42:01
【问题描述】:

我对我的应用程序有一个会话视图。 我想在这个视图中以好的方式显示表情符号。 所以我将我的文本存储在一个 NSString 创建上,参数编码设置为:“NSStringEncoding.NonLossyASCII”。 当我的字符串上有表情符号时,它可以工作。 但是当字符串上没有表情符号时,日志就会崩溃:

Exception masked 异常:无法初始化 键入“Foundation.NSString”:本机“initWithData:encoding:”方法 返回零。可以通过设置忽略此条件 MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure 为 false。在(包装 托管到本地) ObjCRuntime.Messaging:void_objc_msgSend_IntPtr_IntPtr_bool (intptr,intptr,intptr,intptr,bool) 在 Foundation.NSObject.InvokeOnMainThread(System.Action 动作) [0x00007] 在 /Users/builder/data/lanes/3988/e02d2723/source/xamarin-macios/src/Foundation/NSObject2.cs:560

是否可以检查字符串上是否有表情符号? 谢谢

【问题讨论】:

  • 我不太确定,但为什么需要设置 NSStringEncoding.NonLossyASCII ?没有它,表情符号不工作吗?我能够将表情符号添加到通用(标准)字符串中。
  • 如果我不指定编码,emoji 显示会出现如下文字:"\ud83d"

标签: c# ios xamarin nsstring emoji


【解决方案1】:

无法使用ASCII encoding 表达表情符号(它很古老,仅包含 128 个基本字符)。由于这个原因,字符串初始化失败(如错误消息所示)。使用其他编码(NSUTF8StringEncoding 应该可以)。

【讨论】:

  • 我已经尝试过 UTF8,但它不起作用,它用“\ud83d \ude02”代替表情符号显示我的消息。无损 ASCII 显示表情符号,问题是为什么当我的文本中没有表情符号时它会使我的应用程序崩溃...
  • 目前,我绕过了这样的问题:' try { msgString = new NSString(msg.Content, NSStringEncoding.NonLossyASCII); } catch (Exception e) { msgString = new NSString(msg.Content); } ' 但我不觉得这真的很优雅......
  • @nicar “显示表情符号”是什么意思?
  • 表情符号看起来像表情符号,而不像代码有“\ude02”,没有NSStringEncoding.NonLossyASCII,表情符号看起来像文本代码。
  • 我在 swift gist.github.com/NarayanaRao35/3a69527a746e6cd688c21838e38e2e21 中找到了这个示例但是在 C# 中我无法访问编码的原始值并且在解码中发生异常,我没有返回值像空。所以我认为我不能这样做。
猜你喜欢
  • 2013-04-10
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 2023-03-04
  • 2021-05-19
  • 1970-01-01
  • 2013-04-04
相关资源
最近更新 更多