如何在c#中反转义unicode字符串

本文关键字:转义 unicode 字符串 | 更新日期: 2023-09-27 18:18:28

我有一个来自文本文件的Unicode字符串。我想要显示真实的字符。

例如:

'u8ba1'u7b97'u673a'u2022'u7f51'u7edc'u2022'u6280'u672f'u7c7b

当从文本文件中读取这个字符串时,使用StreamReader.ReadToLine(),它将'转义为'''',如"''u8ba1",这是不希望的。

它将显示与from text相同的Unicode字符串。我想表现的是真实的性格。

  1. 如何改变"''u8ba1""'u8ba1"的结果字符串。
  2. 或者应该使用另一个Reader读取字符串?

如何在c#中反转义unicode字符串

如果你有一个像

这样的字符串
var input1 = "'u8ba1'u7b97'u673a'u2022'u7f51'u7edc'u2022'u6280'u672f'u7c7b";
// input1 == "计算机•网络•技术类"

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


如果你有像

这样的字符串
var input2 = @"'u8ba1'u7b97'u673a'u2022'u7f51'u7edc'u2022'u6280'u672f'u7c7b";

可以使用以下regex反转义:

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