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