【问题标题】:Getting unicode string from its code - C#从其代码中获取 unicode 字符串 - C#
【发布时间】:2010-11-02 22:15:49
【问题描述】:

我知道下面是在 C# 中使用 unicode 的方法

string unicodeString = "\u0D15";

在我的情况下,我不会在编译时获得字符代码 (0D15)。我在运行时从 XML 文件中得到它。我想知道如何将此代码转换为 unicode 字符串?我尝试了以下

// will not compile as unrecognized escape sequence
string unicodeString = "\u" + codeFromXML; 

// will compile, but just concatenates u with the string got from XML file.
string unicodeString = "\\u" + codeFromXML; 

我该如何处理这种情况?

任何帮助都会很棒!

【问题讨论】:

    标签: c# unicode string-concatenation


    【解决方案1】:

    使用character reference转义xml中的字符:

    <Config value="&#x0D15;" />
    

    它将被 c# 的 xml 解析器正确读取(至少 XElement.Load())。

    【讨论】:

      【解决方案2】:

      您想使用char.ConvertFromUtf32 函数。

      string codePoint = "0D15";
      
      int code = int.Parse(codePoint, System.Globalization.NumberStyles.HexNumber);
      string unicodeString = char.ConvertFromUtf32(code);
      // unicodeString = "ക"
      

      【讨论】:

      • 再次表明微软不知道实际文本编码和 unicode 本身之间的区别......
      • 请注意,当您传递一个 UTF-16 代理项时会抛出。
      【解决方案3】:

      这是一个 NUnit 测试,展示了 arul 和 Adrian 的解决方案 - 请注意,一个解决方案以字符串中的输入开头,而另一种解决方案的输入仅以字符开头。

          [Test]
          public void testConvertFromUnicode()
          {
      
              char myValue = Char.Parse("\u0D15");
              Assert.AreEqual(3349, myValue);
      
              char unicodeChar = '\u0D15';
              string unicodeString = Char.ConvertFromUtf32(unicodeChar);
              Assert.AreEqual(1, unicodeString.Length);
              char[] charsInString = unicodeString.ToCharArray();
              Assert.AreEqual(1, charsInString.Count());
              Assert.AreEqual((int) '\u0D15', charsInString[0]);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多