【发布时间】:2016-03-21 16:52:08
【问题描述】:
我正在使用正则表达式来匹配一个 unicode 字符串并将其存储在一个字符串中。例如:
注意:以下内容必须从外部文本文件中读取,否则 Visual Studio 会自动将其渲染为俄语。
"Name": "\u0412\u0438\u043d\u043d\u0438\u0446\u0430, \u0443\u043b. \u041a\u0438\u0435\u0432\u0441\u043a\u0430\u044f, 14-\u0431",
我正在使用模式:
"\"Name\":\\s*\"(?<match>[^\"]+)\""
但是,当我将匹配项存储在字符串中时,字符串会保存为:
match = "\\u0412\\u0438\\u043d\\u043d\\u0438\\u0446\\u0430, \\u0443\\u043b. \\u041a\\u0438\\u0435\\u0432\\u0441\\u043a\\u0430\\u044f, 14-\\u0431"
.NET 使用额外的“\”存储字符串
我尝试使用:
match = match.replace(@"\\", @"\")
但 .NET 无法将 @"\\" 识别为存在,因为它正在查看“可视化器版本”。
如何在不 c# 添加额外的 '\' 的情况下存储我的 unicode?p>
编辑: 还有一点:
// this works!
string russianCharacters = "\u041b\u044c\u0432\u043e\u0432, \u0414\u043e\u043b\u0438\u043d\u0430, \u0432\u0443\u043b. \u0427\u043e\u0440\u043d\u043e\u0432\u043e\u043b\u0430, 18");
这会在可视化器中正确呈现为俄语字符。但是当我存储来自外部文本文件的正则表达式匹配的字符时,它被存储为一个excaped序列。
如何将我的字符串呈现为俄语字符而不是转义的 unicode 序列?
【问题讨论】:
-
嗯,没有。 .NET 没有这样的事情。也许您会因为调试器 显示 .NET 字符串而感到困惑?尝试将字符串保存到纯文本文件,您会看到它实际 的样子(请使用
Encoding.Unicode确定)。 `\` 只存在于“可视化器”中,这就是为什么你不能替换它,反之亦然。 .NET 不是在看“可视化器”版本,而是在看。 -
不,你正在查看可视化器版本。没有双反斜杠。另外,你想通过存储这样的字符串来完成什么?
-
HTMLDecode 适用于之前使用 HTMLEncode 编码的字符串。由于您的字符串未编码,因此.net 无法解码。见msdn.microsoft.com/en-us/library/…
-
唯一添加额外反斜杠的是调试器,仅用于显示目的。但这里似乎确实存在一个合理的问题,只是初步分析错误。你的数据来自哪里?它有 Unicode 字符或转义序列吗?
-
@WiktorStribiżew 谢谢!!做到了!如果你想发布一个正式的答案,我可以给你赏金。谢谢!