【问题标题】:how to deal with quotes in a string when passing that string to the command line将字符串传递给命令行时如何处理字符串中的引号
【发布时间】:2010-02-01 22:54:05
【问题描述】:

我无法理解引号。

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

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

然后我想将它传递给带有转义序列的命令行。因此,我需要我的字符串看起来像(我认为):

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

所以看起来,每次我的字符串中有一个(实际的)",我都需要\"

我尝试过使用:

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

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

【问题讨论】:

    标签: c# string command-line


    【解决方案1】:

    确保你正在做:

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

    不仅仅是:

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

    已经是这样了吗?

    【讨论】:

      【解决方案2】:

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

      所以你想发送 "John ""The Man"" Doe" 通过转义每个引号在 C# 中得到的

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

      【讨论】:

      • 谢谢,但我从其他地方检索到的字符串,它已经以"John \"The Man\" Doe" 的形式出现(例如)
      • 它被输入到 LAME.exe mp3 编码器中,当我手动尝试时,\ 转义字符起作用
      • 转义引号的方法是特定于应用程序的,但大多数应用程序使用\转义字符(例如C#的Main(string[])使用\转义字符)。
      • 是的,但大多数命令行解析器不要,因为\是windows中的路径分隔符。
      • 如果您阅读有关Environment.GetCommandLineArgs 工作原理的文档,您会看到它对它的工作原理做了一些规定。所以只有 \" 被视为转义,但 C:\ 不是。(IIRC 这与 MS VC++ 相同。)参见msdn.microsoft.com/en-us/library/…
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-12-05
        • 1970-01-01
        • 2023-03-30
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多