我想做一件很简单的事。
string img = "sadadsasdsa";
string res = @"<image src=""data:img/jpg;base64," + img + @"""/>";我得到的输出为<image src=\"data:img/jpg;base64,sadadsasdsa\"/>
而我想要的输出是<image src="data:img/jpg;base64,sadadsasdsa"/>
我不希望在数据之前和结尾添加意外的“\”。
我甚至尝试使用反斜杠作为转义序列
string res = "<image src=\"data:img/jpg;base64," + img + "\"/>";
我的输出还是一样的。我在这里错过了什么?
好的,当我用console.writeline打印上面的“res”字符串时,我没有得到这个神奇的斜线。但是当我在调试器中查看它时,我确实看到了它。当我从web值控制器返回字符串时,我仍然会看到它。我想这与字符串文字的解析有关。
[HttpGet]
[Route("api/quotes/image")]
public string ImageString()
{
string imgg = "sadadsasdsa" + "\"";
string ress = @"<image src=""data:img/jpg;base64," + imgg + "/>";
return ress;
} 当我试图使用Console.WriteLine打印字符串时,我没有看到不需要的反斜杠。但是,在调试器和从WebAPI控制器返回字符串时,我确实看到了它,如上面所示。
发布于 2016-01-30 06:54:59
绳子“res”好像坏了。但是,使用字符串格式是一种选择吗?例如:
string img = "sadadsasdsa";
string actual = string.Format(
CultureInfo.InvariantCulture,
"<image src=\"data:img/jpg;base64,{0}\"/>",
img);
string expected = "<image src=\"data:img/jpg;base64,sadadsasdsa\"/>";这里的编辑是一个代码片段,它从您的初始问题返回连接的字符串:
public class ValuesController : ApiController
{
public IEnumerable<string> Get()
{
// your string concat
string img = "sadadsasdsa";
string actual = string.Format(
CultureInfo.InvariantCulture,
"<image src=\"data:img/jpg;base64,{0}\"/>",
img);
// DEBUG ONLY - for simplicity use ASCII encoding
Encoding enc = Encoding.ASCII;
foreach (byte b in enc.GetBytes(actual))
{
// write bytes and characters
Debug.WriteLine(b.ToString("X2") + " " + enc.GetString(new byte[] {b}));
}
return new string[] { actual };
}在调试窗口中,您将看到字符串‘’不是是否包含反斜杠(0x5C),如所需:3C < 69 i 6D m 61 a 67 g 65 e 20 73 s 72 r 63 c 3D = 22 " 64 d 61 a 74 t 61 a 3A : 69 i 6D m ...
接收到的HTTP响应包含由JSON序列化程序引入的转义双引号。因为双引号在JSON中是有意义的,所以它们必须在JSON值中转义。这可以在Fiddler Response Raw视图中观察到:Content-Type: application/json; charset=utf-8 ["<image src=\"data:img/jpg;base64,sadadsasdsa\"/>"]
反序列化之后,响应包含没有反斜杠的字符串。这可以在Fiddler Response JSON视图中观察到。(我使用Fiddler 4.6.2.0)
主要相关:question 9462425
您还可以使用Postman (Chrome扩展)查看这一点,这对于更改HTTP请求的“接受”头非常有用。'application/json‘将返回JSON,'application/ XML’将返回XML。两种格式在序列化时的外观非常不同。玩弄Accept并查看得到的响应说明了转义有意义字符的必要性。
如果这有帮助的话,你会不会这么好心地取消投票呢?
发布于 2016-01-30 07:37:58
这是一个标准的调试器行为。你会得到这个:

调试时,如下所示:

在控制台上。
更多信息见:Can the Visual Studio Debugger display strings unquoted/unescaped?。
https://stackoverflow.com/questions/35098896
复制相似问题