uGUI 文本字段,如何删除“替换字符”(uFFFD aka �)?

Posted

技术标签:

【中文标题】uGUI 文本字段,如何删除“替换字符”(uFFFD aka �)?【英文标题】:uGUI Text Field, How to Remove "Replacement Characters" (uFFFD aka �)? 【发布时间】:2020-04-20 00:53:20 【问题描述】:

使用 uGUI 文本组件,我得到了“替换字符”,也就是我找不到删除它们的方法。

我从 Instagram api 获得一个字符串,其中包含我需要的两个非字母语言字符(例如日语)的 unicode 字符。

但是,表情符号的 unicode 字符作为替换字符出现,即 �。 我不需要表情符号,它们可以被删除,但是我找不到这样做的方法。

我无法使用 TextMeshPro,因为我无法生成具有显示各种语言所需的所有 unicode 字符的字体资源(这可能是用户错误,但当我尝试该过程时会挂起)。

我注意到这些 � 字符不会出现在 Inspector 或控制台中,因此必须有一种方法可以忽略或删除它们。

我正在设置这样的字符串

body.text = System.Uri.UnescapeDataString(postData.text);

我尝试了很多没有用的方法,包括

    body.text = body.text.Replace('\uFFFD','\'');//doesn't work
    body.text = Regex.Replace(body.text, @"^[\ufffd]", string.Empty);//doesn't work

我也尝试将字符串分解为 char 数组。当我尝试打印到控制台时,遇到替换字符时出现此错误:

    foreach (char item in postData.text.ToCharArray())
                print(item); //Error: UTF-16 to UTF-8 conversion failed because the input string is invalid

对此的任何帮助将不胜感激! 谢谢。

Unity 2018.4.4,c#

【问题讨论】:

【参考方案1】:

找到答案了! 这篇文章提供了一个解决方案:How do I remove emoji characters from a string?

body.text = Regex.Replace(body.text, @"\pCs", "");

【讨论】:

我想说 Unity 在组合字符方面仍然存在问题(例如,试试这个字符串 i̇ ï ị i̤),但看起来他们在 2018.3.7 和 2019.1.7 之间修复了这个问题。我能找到的唯一渲染不完美的字符是,看起来更像=​̸

以上是关于uGUI 文本字段,如何删除“替换字符”(uFFFD aka �)?的主要内容,如果未能解决你的问题,请参考以下文章

AS3 用图像字符替换字符串/文本

SQL 更新替换字符串中的部分文本

sql中如何批量替换字段里的字符串?

如何在文本字段下方删除时更改文本字段的位置?

如何在删除时准确更新文本字段的属性?

如何从雪花中删除 Unicode 替换字符