gpt4 book ai didi

c# - 如何转义序列包括\u和\U?

转载 作者:太空宇宙 更新时间:2023-11-03 19:50:34 25 4
gpt4 key购买 nike

我在 .resx 文件中有一些字符串,包括一些像这样的序列:

\u26A0 warning

所以我使用下面的代码来取消转义

str = Regex.Unescape(str);

现在,当我看到结果时一切正常(使用 \u)并且它显示相关的 emoji

但是 Regex.Unescape(...) 方法在输入字符串包含 \U 时不起作用强>像这样:

\U0001F4D8 book 

它返回这个错误:

Error: Unrecognized escape sequence \U

我的问题:

  • 在.Net框架中是否有另一种方法来反转义序列包括\u\U
  • 如果没有嵌入方法,如何手动编写辅助方法来实现?

编辑:

当我从 resx 文件中读取带有双反斜杠的字符串时,我应该将这些 Unicode 序列转换为它们的字符:

enter image description here

最佳答案

的确,根据Regex.Unescape的源代码, RegexParser.ScanCharEscape , \U 未处理。

相反,您可以考虑在 char.ConnvertFromUtf32 的帮助下进行手动转换:

string converted = char.ConvertFromUtf32(int.Parse("0001F4D8", NumberStyles.HexNumber));

这是一个实现草案。 (恼人的复杂性来自试图区分 \U\\U。)

static string Unescape(string str)
{
StringBuilder builder = new StringBuilder();
int startIndex = 0;
while(true)
{
int index = IndexOfBackslashU(str, startIndex);
if (index == -1)
return builder.Append(Regex.Unescape(str.Substring(startIndex))).ToString();
builder.Append(Regex.Unescape(str.Substring(startIndex, index - startIndex)));
string number = str.Substring(index + 2, 8);
builder.Append(char.ConvertFromUtf32(int.Parse(number, NumberStyles.HexNumber)));
startIndex = index + 10;
}
}

static int IndexOfBackslashU(string str, int startIndex)
{
while (true)
{
int index = str.IndexOf(@"\U", startIndex);
if (index == -1)
return index;
bool evenNumberOfPreviousBackslashes = true;
for (int k = index-1; k >= 0 && str[k] == '\\'; k--)
evenNumberOfPreviousBackslashes = !evenNumberOfPreviousBackslashes;
if (evenNumberOfPreviousBackslashes)
return index;
startIndex = index + 2;
}
}

关于c# - 如何转义序列包括\u和\U?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40032496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com