【问题标题】:Convert from '\ud835' format to "????" in c# [UWP]从 '\ud835' 格式转换为 "????"在 c# [UWP] 中
【发布时间】:2019-01-18 13:41:53
【问题描述】:

我有一个带有一些奇怪字符的字符串(例如)"???????????????? ????????????????????????????"。我需要检查 List 是否包含字符串中的第一项。但是如果我索引它,它总是变成\ud835。在使用 Char.ConvertFromUtf32(\ud835) 和其他一些尝试之后,我根本不知道如何将第一项作为“????”。

【问题讨论】:

  • 我没有关注。 '\Ud835' 是“高级代理”,本身不是有效字符。您的字符串是“Lead Backend”并以一种不稳定的字体呈现,还是该前导字符真的很不稳定并由 Unicode 代理对表示?
  • @Flydog57 它由一个 Unicode 代理对表示
  • 这可能会有所帮助:stackoverflow.com/questions/14347799/…。否则,请搜索“代理对”上的内容。我从来不用和他们一起玩
  • 什么是“字符串中的第一项”? ??? ??????????????????
  • @JacobKrall "????"是第一项

标签: c# .net uwp surrogate-pairs


【解决方案1】:

? 用 UTF-16 中的代理对表示,这是 .NET 使用的编码。

代理pair两个字符表示:

        var s = "???? ???????";
        Console.WriteLine(new string(new[] { s[0], s[1] }) == "?");

有一些内置的帮助方法,例如 Char.ConvertToUtf32Char.IsSurrogate,您可以使用它们来确定您是否处于这种情况。

【讨论】:

  • 经过进一步检查,我认为它是 UTF16 格式
  • 是的,就像我说的,.NET 使用 UTF-16 编码。
  • 对不起,我错过了,但是如何在索引第一个值后获得“?”。 "\ud835" != "?" 所以这不起作用
  • 请阅读我的回答。 需要两个索引才能返回“?”。
  • 好的,谢谢。我刚刚看了字符串“???????????”的.Count(),现在就明白了。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 2020-11-06
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多