如何按名称查找Unicode字符?

时间:2019-06-25 18:14:47

标签: .net unicode

这是this问题的完全相反

基本上我需要类似的东西:

org.rundeck.api.RundeckClient

在另一个问题中提到的UnicodeInfo NuGet程序包看起来很有希望,但似乎没有提供该功能。

还是我错过了什么?

编辑:

仅出于上下文考虑:我需要解析转义序列,例如

my_list = ['Today is a good day.\nLet\'s go outside', 'I have a cat to feed.\nI need go home now.']
my_list = [item.split('\n')[0] for item in list]
# -> ['Today is a good day.', 'I have a cat to feed.']

1 个答案:

答案 0 :(得分:1)

您可以使用您提到的UnicodeInformation库来实现这一目标。它为您提供了所需的所有信息,因此您可以创建自己的帮助器类来进行反向映射。

这是一个示例类:

public static class UnicodeName
{
   private static Dictionary<string, string> nameDisplayTextDictionary = 
      UnicodeInfo.GetBlocks().SelectMany((block) => block.CodePointRange).Select(codePoint => UnicodeInfo.GetCharInfo(codePoint)) // select all character infos
      .Where(charInfo => charInfo.Name != null) // filter out the ones that have null names
      .ToDictionary(charinfo => charinfo.Name, charInfo => charInfo.GetDisplayText()); // create lookup dictionary to get the display text from the name

   public static string GetDisplayText(string unicodeName)
   {
      if (nameDisplayTextDictionary.ContainsKey(unicodeName))
      {
         return nameDisplayTextDictionary[unicodeName];
      }
      else
      {
         throw new Exception($"Unknown unicode name {unicodeName}");
      }
   }
}

然后您可以按需要使用它。

string displayText = UnicodeName.GetDisplayText("EURO SIGN");

该方法返回一个字符串,因为在某些情况下返回的不是单个字符。