如何在C#中编码含\n与\r的字符串并将反斜杠转为%5c?
在C#中实现反斜杠编码为%5c的字符串编码需求
如果你需要将字符串中的**字面反斜杠('')**编码为%5c,同时正确处理\n(换行符)和\r(回车符)的编码,可以用以下几种方法解决:
方法1:使用Uri.EscapeDataString(推荐)
这个方法符合标准URL编码规则,会自动将反斜杠编码为%5c,换行符\n编码为%0a,回车符\r编码为%0d,完全满足你的需求:
string originalString = @"包含\反斜杠\n换行\r回车的字符串"; string encodedString = Uri.EscapeDataString(originalString); // 输出示例:"包含%5c反斜杠%0a换行%0d回车的字符串"
方法2:自定义编码逻辑(精确控制)
如果需要更精细的控制,可以手动遍历字符串,对特定字符进行编码:
using System.Text; using System.Web; string originalString = @"包含\反斜杠\n换行\r回车的字符串"; StringBuilder encodedBuilder = new StringBuilder(); foreach (char c in originalString) { switch (c) { case '\\': encodedBuilder.Append("%5c"); break; case '\n': encodedBuilder.Append("%0a"); break; case '\r': encodedBuilder.Append("%0d"); break; default: // 对其他字符使用标准URL编码 encodedBuilder.Append(HttpUtility.UrlEncode(c.ToString())); break; } } string encodedString = encodedBuilder.ToString();
方法3:替换占位符适配HttpUtility.UrlEncode
如果你必须使用HttpUtility.UrlEncode,可以通过占位符规避它对反斜杠的异常处理:
using System.Web; string originalString = @"包含\反斜杠\n换行\r回车的字符串"; // 先用占位符替换反斜杠,避免被错误编码 string tempString = originalString.Replace("\\", "___BACKSLASH___"); // 编码其他字符 string tempEncoded = HttpUtility.UrlEncode(tempString); // 替换回目标编码 string encodedString = tempEncoded.Replace("___BACKSLASH___", "%5c");
注意:占位符要选择原字符串中不会出现的内容,避免冲突。
内容的提问来源于stack exchange,提问作者PremKumar Shanmugam
相关产品推荐
相关产品推荐

