【问题标题】:How do I find out if my string contains the "micro" Unicode character?如何确定我的字符串是否包含“微型”Unicode 字符?
【发布时间】:2009-09-08 21:14:01
【问题描述】:

我有一个包含实验室数据的 Excel 电子表格,如下所示:

µg/L (ppb)

我想测试是否存在希腊字母“µ”,如果发现我需要做一些特别的事情。

通常,我会这样写:

if ( cell.StartsWith(matchSequence) ) { 
//.. <-- universal symbol for "magic" :)
}

我知道框架中有一个编码 API,但我应该将它仅用于这种极端情况还是仅从字符映射中复制希腊微符号?

如何测试是否存在此 Unicode 字符?字符映射似乎是一个“便宜”的修复程序,以后会咬我(我在一家跨国公司工作)。

我想做一些可维护的事情,而不仅仅是一些只适用于这种极端情况的疯狂数学-巫毒转换。

我想我在这里寻求最佳实践建议。

谢谢!

【问题讨论】:

    标签: c# unicode


    【解决方案1】:

    您需要计算出您感兴趣的 unicode 字符,然后您可以用带有转义序列的代码来表示它。

    例如,µ 是 U+00B5,所以你只需要:

    if (text.Contains("\u00b5"))
    

    您可以从charmap 或Unicode code charts 中找到Unicode 值。

    【讨论】:

    • 我打算使用标签“jon-skeet”,但我认为这可能很便宜:)
    • 美国的?是 - \U 用于不在基本多语言平面中的 Unicode 字符,即超过 U+FFFF。
    • @Jon:对不起,我的意思是序列中小写的“b”是否重要?在您的示例中,它是大写的,在方法调用中,它是小写的
    【解决方案2】:

    micro µ 的 Unicode 代码点是 U+00B5,与“希腊字母 mu”µ 不同,后者位于 U+03BC。因此,您可以使用“\u00b5”来查找它,也可能还可以查找“\u03bc”——它们看起来相同,因此创建电子表格的人可能使用了错误的电子表格!

    【讨论】:

      【解决方案3】:

      您可以从字符映射表中显示给您的数字等值创建一个 Char(显示为“P”的 U+0050)。为此,只需检查包含:

                  string value;
                  if (value.Contains(Char.ConvertFromUtf32(0x0050)))
                      ;
      

      【讨论】:

        【解决方案4】:

        C# 代码文件通常以 utf8 编码,因为该语言使用这种编码。 c#(和其他 .NET 语言)中的所有字符串和字符串文字都以 utf16 编码。因此,您可以安全地从字符图中复制微字符。 您还可以将其整数值用作 Unicode 文字,例如 0x1234。

        【讨论】:

          猜你喜欢
          • 2011-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-05
          • 2013-06-25
          • 2019-06-11
          • 1970-01-01
          相关资源
          最近更新 更多