C# 如何在C中取消unicode字符串的显示#

C# 如何在C中取消unicode字符串的显示#,c#,unicode,C#,Unicode,我有一个文本文件中的Unicode字符串。我想展示真实的角色 例如: \u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b 当使用StreamReader.ReadToLine()从文本文件中读取此字符串时,它将\转义为'\\',例如“\\u8ba1”,这是不需要的 它将显示与文本相同的Unicode字符串。我想展示的是真实的角色 如何将结果字符串中的“\\u8ba1”更改为“\u8ba1” 或者应该使用其他读取器来读取字符串

我有一个文本文件中的Unicode字符串。我想展示真实的角色

例如:

\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b
当使用
StreamReader.ReadToLine()
从文本文件中读取此字符串时,它将
\
转义为
'\\'
,例如
“\\u8ba1”
,这是不需要的

它将显示与文本相同的Unicode字符串。我想展示的是真实的角色

  • 如何将结果字符串中的
    “\\u8ba1”
    更改为
    “\u8ba1”
  • 或者应该使用其他读取器来读取字符串
    如果你有一根像

    var input1 = "\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b";
    
    // input1 == "计算机•网络•技术类"
    
    var input2 = @"\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b";
    
    你不需要逃避任何事情。它只是包含转义序列的字符串文字,而不是字符串本身



    如果你有一根像

    var input1 = "\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b";
    
    // input1 == "计算机•网络•技术类"
    
    var input2 = @"\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b";
    
    您可以使用以下正则表达式取消对其进行scape:

    var result = Regex.Replace(
        input2,
        @"\\[Uu]([0-9A-Fa-f]{4})",
        m => char.ToString(
            (char)ushort.Parse(m.Groups[1].Value, NumberStyles.AllowHexSpecifier)));
    
    // result == "计算机•网络•技术类"
    

    这个问题出现在谷歌搜索的第一个结果中,但我认为应该有一个更简单的方法。。。这就是我最终使用的:

    using System.Text.RegularExpressions;
    
    //...
    
    var str = "Ingl\\u00e9s";
    var converted = Regex.Unescape(str);
    Console.WriteLine($"{converted} {str != converted}"); // Inglés True
    

    您可以在StreamReader构造函数中提供编码,也可以在此处查看我对该问题的回答:[在C#中计算转义字符串][1][1]:您还可以使用static
    Regex.Unescape
    。不,Regex.Unescape仅用于Regex字符请不要使用Regex.Unescape。它将完成unicode转义字符的工作,但也可能会取消转义包含正则表达式相关关键字的其他文本。UrlDecode不会对
    \u00e9
    执行任何操作,因为它已经是真实字符。如果将此应用于问题,它将是
    string x=HttpUtility.UrlDecode(“Ingl\\u00e9s”)它什么也做不了。@Silvermind捕捉得好。编辑了答案,现在应该可以了。