【问题标题】:Unicode characters stringUnicode 字符串
【发布时间】:2012-07-26 21:34:48
【问题描述】:

我有以下String 的字符。

string s = "\\u0625\\u0647\\u0644";

当我打印上述序列时,我得到:

\u0625\u0647\u062

我怎样才能得到真正的可打印 Unicode 字符而不是这个 \uxxxx 表示?

【问题讨论】:

  • 我觉得这个问题有点含糊,你控制那个字符串吗?如果是这样,只需删除其中一个反斜杠,即。 “\u1234\u5678”。如果没有,您应该考虑使用带有回调方法的正则表达式来解析数字,将其转换为字符,然后将该字符作为字符串返回
  • 你无法控制字符串是什么意思?你的方案是什么?
  • 好的,我找到了答案:System.Text.RegularExpressions.Regex.Unescape()
  • 你怎么走,即。从包含 Unicode 字符的未转义字符串到 \\uXXXX 转义形式? PS:我已经尝试了明显的Regex.Escape(...)方法,但它不适用于以下内容:番茄酱????#thankyou!
  • @MarcAndreson 请将您的解决方案添加为答案并将其标记为已接受,以便其他人清楚地看到解决您的问题的方法。

标签: c# unicode


【解决方案1】:

如果你真的不控制字符串,那么你需要用它们的值替换那些转义序列:

Regex.Replace(s, @"\u([0-9A-Fa-f]{4})", m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString());

并希望您也没有\\ 转义。

【讨论】:

  • 正确的答案是 System.Text.RegularExpressions.Regex.Unescape()
  • 我认为 MatchEvaluator 应该是:m => ( (char) Convert.ToInt32(m.Groups[1].Value, 16) ).ToString()
  • @MarcAndreson 别搞错了,“作品”和“正确答案”没有关系。
  • 抛出异常:十六进制数字不足。
【解决方案2】:

Asker 将其发布为对他们问题的回答:

我找到了答案:

s = System.Text.RegularExpressions.Regex.Unescape(s);

【讨论】:

    【解决方案3】:

    试试Regex:

    String inputString = "\\u0625\\u0647\\u0644";
    
    var stringBuilder = new StringBuilder();
    foreach (Match match in Regex.Matches(inputString, @"\u([\dA-Fa-f]{4})"))
    {
        stringBuilder.AppendFormat(@"{0}", 
                                   (Char)Convert.ToInt32(match.Groups[1].Value));
    }
    
    var result = stringBuilder.ToString();
    

    【讨论】:

      【解决方案4】:

      我有以下字符串“\u0001”,我想获取它的值。
      我尝试了很多,但这对我有用

      int val = Convert.ToInt32(Convert.ToChar("\u0001")); // val = 1;
      

      如果你有多个字符,你可以使用以下技术

      var original ="\u0001\u0002";
      var s = "";
      for (int i = 0; i < original.Length; i++)
      {
          s += Convert.ToInt32(Convert.ToChar(original[i]));
      }
      
      // s will be "12"
      

      【讨论】:

        【解决方案5】:

        我建议使用String.Normalize。您可以在这里找到所有内容:

        http://msdn.microsoft.com/it-it/library/8eaxk1x2.aspx

        【讨论】:

        • Normalize 进行 Unicode 规范化,这是一个完全独立的概念。
        猜你喜欢
        • 2017-11-19
        • 2019-05-12
        • 1970-01-01
        • 2011-11-12
        • 2013-06-21
        • 2011-11-30
        • 2016-06-22
        • 2016-10-15
        • 2011-04-08
        相关资源
        最近更新 更多