【问题标题】:Convert string to string将字符串转换为字符串
【发布时间】:2019-01-05 13:48:32
【问题描述】:

请说。 为什么代码中的字符串“\xF0\x9F\x98\x81”与参数命令行中的“\xF0\x9F\x98\x81”不一样?

func main() {

    text1 := "\xF0\x9F\x98\x81"
    text2 := os.Args[1]
}

长度字符串 "text1" = 4, "text2" = 16 if len(text1). 我如何将“text2”转换为“text1”?

【问题讨论】:

  • 我对 Go 一无所知,但来自 C# 世界,字符串中的 \x 是 编译器 的东西,其中字符串 "\bx" 由两个字符组成,即钟形字符和字符x。如果你想在接受命令行参数时模仿这个,那么你基本上需要模仿这个。您的字符串由 16 个字符组成,因为 \xF0\x9F\x98\x81 是 16 个字符,根本没有任何解释。
  • 你基本上必须实现一些贯穿字符串的东西,并将所有可能的转义格式/值转换成它们对应的字符。
  • 我明白了,但是怎么样?可能在 golang 上已经准备好了,或者有人知道,我该怎么做。对 C# 怎么做,请说。
  • C# 或 .NET 中不支持这样做,除了编译器,显然要编写一些代码来做到这一点。可能会有一些问题,但至少你知道问题是什么,这应该会引导你找到解决方案(假设我对 C# 的了解适用于这种情况)。

标签: string go command-line converter


【解决方案1】:

确实有一个标准的包和一个功能。 strconv.Unquote

Unquote 将 s 解释为单引号、双引号或反引号 Go 字符串文字,返回 s 引号的字符串值。 (如果 s 是单引号的,它将是一个 Go 字符文字;Unquote 返回相应的单字符字符串。)

请注意,您需要引用输入搅拌。在您的代码中,它应该是:

text2 := strconv.Unquote(`"`+os.Args[1]+`"`)

游乐场示例:https://play.golang.org/p/u2yU3VQHhXO

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2011-08-22
    • 2014-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多