【发布时间】:2010-12-27 09:33:03
【问题描述】:
我有这段特殊的代码,但它不起作用。
text = text.Replace("\xEF\xBF\xBD", "?");
有谁知道如何在 C# String 中将文本 "\xEF\xBF\xBD" 替换为 "?"。
【问题讨论】:
我有这段特殊的代码,但它不起作用。
text = text.Replace("\xEF\xBF\xBD", "?");
有谁知道如何在 C# String 中将文本 "\xEF\xBF\xBD" 替换为 "?"。
【问题讨论】:
你必须转义反斜杠。
text = text.Replace("\\xEF\\xBF\\xBD", "?");
或者,您可以使用 @ 符号转义整个字符串:
text = text.Replace(@"\xEF\xBF\xBD", "?");
【讨论】:
简答(猜测一下):
text = text.Replace("\xFFFD", "?");
了解Unicode和character encodings,尤其是utf-8.
长答案:
嗯,你的意思是字面上的“\xEF\xBF\xBD”吗?也就是由这些字符组成的字符串:
backslash, uppercase latin character E, uppercase latin character F, backslash, uppercase latin character B, uppercase latin character F, backslash, uppercase latin character B, uppercase latin character D
那么,答案是:
text = text.Replace(@"\xEF\xBF\xBD", "?");
或者你是用C#转义序列“\xEF\xBF\xBD”描述的字符序列,即:
LATIN SMALL LETTER I WITH DIAERESIS, INVERTED QUESTION MARK, VULGAR FRACTION ONE HALF
(将显示为“�)?那么,您的代码将是正确的:
text = text.Replace("\xEF\xBF\xBD", "?");
还是要替换byte序列
EF BF BD
(实际上可能是 unicode 替换字符 FFFD 的 utf-8 表示形式,通常显示为“�”)?
这只是一个疯狂的猜测,但直觉告诉你实际上想要实现后者。现在,.Net 字符串包含字符,而不是字节,但假设您已经阅读了这些字节,例如从 utf-8 格式的文件中,答案是:
text = text.Replace("\xFFFD", "?");
【讨论】: