如何在C#中unescape unicode字符串

Hyz*_*ups 11 c# unicode

我有一个来自文本文件的Unicode字符串.我想展示真实的角色.

例如:

\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b
Run Code Online (Sandbox Code Playgroud)

当从文本文件中读取此字符串时,使用StreamReader.ReadToLine()它,它会转义\'\\'诸如"\\u8ba1",这是不想要的.

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

  1. 如何更改结果字符串中的"\\u8ba1"to "\u8ba1".
  2. 或者应该使用另一个Reader来读取字符串?

dtb*_*dtb 18

如果你有像这样的字符串

var input1 = "\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b";

// input1 == "???•??•???"
Run Code Online (Sandbox Code Playgroud)

你不需要任何东西.它只是包含转义序列的字符串文字,而不是字符串本身.


如果你有像这样的字符串

var input2 = @"\u8ba1\u7b97\u673a\u2022\u7f51\u7edc\u2022\u6280\u672f\u7c7b";
Run Code Online (Sandbox Code Playgroud)

你可以使用以下正则表达式来解决它:

var result = Regex.Replace(
    input2,
    @"\\[Uu]([0-9A-Fa-f]{4})",
    m => char.ToString(
        (char)ushort.Parse(m.Groups[1].Value, NumberStyles.AllowHexSpecifier)));

// result == "???•??•???"
Run Code Online (Sandbox Code Playgroud)

  • 还可以使用静态“Regex.Unescape”。 (3认同)
  • 不,Regex.Unescape仅适用于正则表达式字符 (3认同)

rra*_*lvv 6

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

\n
using System.Text.RegularExpressions;\n\n//...\n\nvar str = "Ingl\\\\u00e9s";\nvar converted = Regex.Unescape(str);\nConsole.WriteLine($"{converted} {str != converted}"); // Ingl\xc3\xa9s True\n
Run Code Online (Sandbox Code Playgroud)\n