首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在控制台或spec2中运行时,相同的函数返回不同的结果。

在控制台或spec2中运行时,相同的函数返回不同的结果。
EN

Stack Overflow用户
提问于 2014-04-04 12:32:13
回答 1查看 113关注 0票数 1

这是个很奇怪的问题。

我有一个简单的类,它可以解码base64字符串,并在:之前获得第一部分。

代码语言:javascript
复制
import scala.util.{Success, Try}
import org.apache.commons.codec.binary.Base64

class IdDecoder {

  def decode(token: String): Option[String] = {
    if (token.isEmpty)
      None
    else
      Try(new String(Base64.decodeBase64(token.getBytes)).split(":")(0)) match {
        case Success(id) => Some(id)
        case _ => None
      }
  }

}

并定义一个解码字符串的方法。

代码语言:javascript
复制
object StrangeToken {

  def main(args: Array[String]) {
    decode()
  }

  def decode() = {
    val token = "InternalServerError"
    val Some(id) = (new IdDecoder).decode(token)
    println("### StrangeToken's id len:" + id.length)
    id.toCharArray.foreach(c => println(c.toInt))
    id
  }

}

以普通代码运行,id的长度为15

当我在sbt的控制台、IDEA或生产中运行它时,结果是:

代码语言:javascript
复制
### StrangeToken's id len:15
34
123
94
65533
118
65533
73
65533
65533
122
65533
43
0
0
0

作为spec2测试运行,id的长度为14

但是当我在spec2中运行它时,如下所示:

代码语言:javascript
复制
"id decoder" should {
  "get decoded string whose length is 15" in {
    val id = StrangeToken.decode()
    id.length must be equalTo 15
  }
}

此测试失败,结果是:

代码语言:javascript
复制
### StrangeToken's id len:14
34
123
94
198
118
8226
73
205
212
122
177
43
198
228

我不知道为什么在spec2中结果是不同的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-04 17:35:24

我碰巧在我的sbt控制台中得到了14,我的sbt脚本指定了-Dfile.encoding=UTF8

您的new String(bytes)使用默认编码。可以向构造函数提供字符集。

第二猜:

在-codec配置中有不同版本的Test库,或者其他版本。

当我将版本恢复到1.1时,我也得到了15。

老实说,这本来是我的第二次猜测。在-codec项目中有很多历史,所以不兼容或行为改变并不令人惊讶。想必引起数字14的行为更符合常理。

在依赖树中出现两次“公共”依赖也并不令人惊讶。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22862918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档