这是一个非常奇怪的问题。
我有一个简单的类可以解码base64字符串并获取:
之前的第一部分:
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
}
}
}
定义一个解码字符串
的方法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
}
}
当我在sbt的控制台或IDEA或生产中运行时,结果是:
### StrangeToken's id len:15
34
123
94
65533
118
65533
73
65533
65533
122
65533
43
0
0
0
但是当我在spec2中运行时,如:
"id decoder" should {
"get decoded string whose length is 15" in {
val id = StrangeToken.decode()
id.length must be equalTo 15
}
}
此测试失败,结果是:
### StrangeToken's id len:14
34
123
94
198
118
8226
73
205
212
122
177
43
198
228
我不确定为什么spec2中的结果有所不同。
答案 0 :(得分:1)
我的sbt控制台碰巧得到14,我的sbt脚本指定-Dfile.encoding=UTF8
。
您的new String(bytes)
使用默认编码。您可以为构造函数提供charset。
第二次猜测:
您在Test
配置中有不同版本的-codec库,否则。
当我将版本恢复到1.1时,我也得到15。
说实话,这本来是我的第二次猜测。 -codec项目中有很多历史记录,因此不兼容性或行为更改并不令人惊讶。据推测,引起数字14的行为更符合。
一个常见的"同样令人惊讶。依赖项在依赖树中出现两次。