String 字符编码会干扰匹配的Scala字符串吗?

String 字符编码会干扰匹配的Scala字符串吗?,string,scala,character-encoding,pattern-matching,String,Scala,Character Encoding,Pattern Matching,现在,当尝试匹配两个Scala字符串时,正在处理一个奇怪的问题。尝试确定以下两个字符串是否相同时: SM8lz5IEIWs7TUhR3ke27pnY3XsjojxqaMEg+ARCGs1nm3sVkwA+CM+XJfdsUxqzqH7LZdkflvny z621tYkmXA==和SM8lz5IEIWs7TUhR3ke27pnY3XsjojxqaMEg+ARCGs1nm3sVkwA+CM+XJfdsUxqzqH7LZdkflvny z621tYkmXA== Scala返回false。因此,如果我执

现在,当尝试匹配两个Scala字符串时,正在处理一个奇怪的问题。尝试确定以下两个字符串是否相同时:

SM8lz5IEIWs7TUhR3ke27pnY3XsjojxqaMEg+ARCGs1nm3sVkwA+CM+XJfdsUxqzqH7LZdkflvny z621tYkmXA==和SM8lz5IEIWs7TUhR3ke27pnY3XsjojxqaMEg+ARCGs1nm3sVkwA+CM+XJfdsUxqzqH7LZdkflvny z621tYkmXA==

Scala返回false。因此,如果我执行以下操作ifhash1==hash2,它将返回false

我怀疑这是一个空白或字符编码问题,因为哈希匹配只有在尝试匹配在不同操作系统的计算机上生成的哈希时才会失败。我已经尝试使用正则表达式剥离空白,但仍然失败

我忽略了什么?还有没有更好的方法来清理和匹配Scala中的哈希

使现代化
在比较了这两个字符串之后,Scala认为hash2比hash1长一个字符。因此,我在两个哈希上都运行了以下函数:.trim.replaceAll?m\s+$。尽管如此,它还是说它们不一样。还有哪些字符可能会干扰?

我已经找到了这个特定问题的原因。显然,在Macintosh上处理字符串时,\r是在任何换行符之外添加的。即使换行符不会在控制台上打印出来,它们仍然在字符串中

补救措施是执行以下操作:.trim.replaceAll\r


现在两个字符串都匹配了。

我已经在osx 10.8上试过了,哈希值比较为true。您可以试着运行hash1.diffhash2,看看是否有实际的差异,它应该会产生不匹配的符号。刚刚意识到Scala认为一个字符比另一个长一个字符。要发布更新。请尝试打印以下内容,其中s1和s2是两个字符串:s1.zips2.zipWithIndex.find{case c1,c2,i=>c1!=c2}。这将告诉您它们在什么索引处开始分化,以及这两个不同的字符是什么。这应该有助于找出问题所在。在比较它们之前,您不想对它们进行正确解码吗?我最初使用原始的字节生成一个新的UTF-8字符串。但是你是在建议进一步吗?我假设你的例子中的胡言乱语不是实际的数据,而是某种引用了printable或base64之类的编码,尽管我不知道确切的格式。是这样吗?这是密码和盐之间的杂凑。然而,我通过从散列中获取字节,然后生成新的Stringhash.getBytes之类的东西,UTF-8来重新处理它,结果是相同的。这解释了吗?是的。但是,如果这些字节是任意的8位值,那么就有可能无法编码为UTF-8字符。如果它们只是字节而不是编码字符,那么您不应该试图将它们视为字符。基本上,你拥有的不是字符串,你不应该假装它是字符串。