Match.Value和国际字符

use*_*270 6 c# regex encoding rtf

更新可能这篇文章对使用RichTextBoxes的编码员有帮助.匹配对于普通字符串是正确的,我没有看到这个并且我没有看到"ä"在richTextBox.Rtf中转换为"\ e4r"!所以Match.Value是正确的 - 人为错误.

RegEx找到正确的文本,但Match.Value错误,因为它用"\'e4"替换德语"ä"!

让example_text =" Primär-ABC "并让我们使用以下代码

String example_text = "<em>Primär-ABC</em>";
Regex em = new Regex(@"<em>[^<]*</em>" );
Match emMatch = em.Match(example_text); //Works!
Match emMatch = em.Match(richtextBox.RTF); //Fails!
while (emMatch.Success)
{
  string matchValue = emMatch.Value;
  Foo(matchValue) ...
}
Run Code Online (Sandbox Code Playgroud)

然后emMatch.Value返回" Prim \'e4r-ABC "而不是" Primär-ABC ".

德国ä转变为'e4!因为我想使用确切的字符串,我需要emMatch.Value作为Primär-ABC - 我该如何实现?

And*_*rpi 2

您在什么情况下这样做?

\n\n
string example_text = "<em>Ich bin ein B\xc3\xa4rliner</em>";\nRegex em = new Regex(@"<em>[^<]*</em>" );\nMatch emMatch = em.Match(example_text);\nwhile (emMatch.Success)\n{\n    Console.WriteLine(emMatch.Value);\n    emMatch = emMatch.NextMatch();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

这输出<em>Ich bin ein B\xc3\xa4rliner</em>这在我的控制台中

\n\n

问题可能不是您返回了错误的值,而是您获得了未正确显示的值的表示形式。这可能取决于很多因素。尝试使用 UTF8 编码将该值写入文本文件,看看它是否仍然不正确。

\n\n

编辑:对。问题是您正在RichTextBox使用该Rtf属性从 WinForms 获取文本。这不会按原样返回文本,而是返回文本的 RTF 表示形式。RTF 不是纯文本,它是一种显示富文本的标记格式。如果您在记事本等中打开 RTF 文档,您会发现其中有很多奇怪的代码 - 包括\\\'e4RTF 文档中的每个 \'\xc3\xa4\'。如果您在 RTF 框中使用了一些标记(如粗体文本、颜色等),.Rtf属性也会返回该代码,看起来像{\\rtlch\\fcs1 \\af31507 \\ltrch\\fcs0 \\cf6\\insrsid15946317\\charrsid15946317 test}

\n\n

所以使用.Text属性。它将返回实际的纯文本。

\n