C# 将字符串传递到命令行时如何处理该字符串中的引号

C# 将字符串传递到命令行时如何处理该字符串中的引号,c#,string,command-line,C#,String,Command Line,我脑子里想不起引语 例如,我有一个带引号的mp3字符串: string ARTIST = "John \"The Man\" Doe" 然后我想把它传递给一个带有转义序列的命令行。因此,我需要我的字符串看起来像(我认为): 所以看起来,每当我的字符串中有一个(实际的)“,我就需要\” 我试过使用: ARTIST.Replace("\"","\\\"") 但这并没有奏效。在我的应用程序中,在命令行中处理引号的正确方法是什么?windows命令行不使用\作为引号的转义,它使用冗余引号 因此,您

我脑子里想不起引语

例如,我有一个带引号的mp3字符串:

string ARTIST = "John \"The Man\" Doe"
然后我想把它传递给一个带有转义序列的命令行。因此,我需要我的字符串看起来像(我认为):

所以看起来,每当我的字符串中有一个(实际的)
,我就需要
\”

我试过使用:

ARTIST.Replace("\"","\\\"") 

但这并没有奏效。在我的应用程序中,在命令行中处理引号的正确方法是什么?

windows命令行不使用\作为引号的转义,它使用冗余引号

因此,您要发送
“John”“Man”“Doe”
,这是您在C#中通过转义每个引号得到的

string ARTIST = "John \"\"The Man\"\" Doe"

基本想法似乎是正确的,但您是否也添加了周围的引号,即

"\"" + ARTIST.Replace("\"", "\\\"") + "\""

另外,请注意,您需要三个反斜杠而不是两个反斜杠来转义
\”
;如果您没有转义,编译器会抱怨。

请确保您正在执行以下操作:

ARTIST = ARTIST.Replace("\"","\\\"");
而不仅仅是:

ARTIST.Replace("\"","\\\"");

已经是这样了吗?

谢谢,但是我从别处检索到的字符串,它已经是
“John\”the Man\“Doe”
(例如)它被输入LAME.exe mp3编码器,当我手动尝试转义引号时,\escape字符起作用。转义引号的方法是特定于应用程序的,但大多数应用程序使用\escape字符(例如,C#的
Main(string[])
使用\escape字符)。是的,但大多数命令行解析器都不这样做,因为\是windows中的路径分隔符。如果您阅读有关
环境.GetCommandLineArgs
工作原理的文档,您会看到它对如何工作有一些规定。因此,只有\“被视为转义,而C:\则不是。(IIRC这与MS VC++相同)参见
ARTIST.Replace("\"","\\\"");