【问题标题】:Scala raw strings error in unicode escapeUnicode转义中的Scala原始字符串错误
【发布时间】:2014-07-26 08:23:28
【问题描述】:

在 Scala 字符串中需要逐字包含以下文字:\usepackage{x}。因此,需要的是对于

val s = """ ... \usepackage{X} ... """

println(s)
... \usepackage{X} ...

目前的尝试包括,

scala> """\usepackage{X}"""
<console>:1: error: error in unicode escape
       """\usepackage{X}"""
            ^

scala> raw"""\usepackage{X}"""
<console>:1: error: error in unicode escape
       raw"""\usepackage{X}"""
               ^

单双引号字符串也被证明是不成功的。

http://docs.scala-lang.org/overviews/core/string-interpolation.html 之后,一个工作示例包括

scala> raw"a\nb"
res1: String = a\nb

不包括 unicode 情况。

【问题讨论】:

  • 如果您有答案,请不要编辑您的原始问题,发布答案并接受它。

标签: string scala unicode unicode-escapes


【解决方案1】:

您似乎遇到了问题SI-4706: Unicode literal syntax thwarts common use cases for triple-quotes

在 Scala 中,Unicode 转义序列不仅在字符或字符串文字内部进行处理。以下代码是否有效可能并不明显:

scala> 5 \u002B 10
res0: Int = 15

不幸的是,如果您不想完全禁用 unicode 转义,似乎没有什么好的方法(-Xno-uescape,仅在 Scala 2.13.1 之前可用,请参阅 PR #8282ee8c1ef8) .

SI-4706 问题中建议的解决方法之一是分隔反斜杠字符:

scala> """\""" + """usepackage{X}"""
res1: String = \usepackage{X}

【讨论】:

  • 感谢“-Xno-uescape”提示。 \u 即使在 cmets 中也会导致编译失败。
  • 您还可以对反斜杠和“u”进行 Unicode 编码:"""\u005c\u0075""" 正确地给出了\u
  • @ComFreek 我迟到了三年,但这值得一个独立的答案
猜你喜欢
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多