Ruby start_with?前后矛盾

时间:2014-11-10 07:47:40

标签: ruby

请告诉我start_with的第一次使用是如何返回false的。

enter image description here

谢谢!

1 个答案:

答案 0 :(得分:4)

您的字符串可能包含隐藏的unicode字符。

如果是这样,字符串以该字符开头,而不是#,这就是您获得false的原因。

要在Ruby中查看,请使用您正在运行start_with?的字符串,然后运行.unpack('C*')。这将返回0255之间的数字数组,表示字符串中每个字节的整数值。普通可打印的ASCII字符最多只能达到126。任何高于此数字的数字都将表明您的字符串中隐藏了非打印字符。

<强>更新

在这种特殊情况下,事实证明使用这种诊断方法表明在字符串的开头确实存在额外的字节。它们出现在数组的开头为[239, 187, 191, ...],其等效字符串为"\xEF\xBB\xBF"或UTF-8代码点 ZERO WIDTH NO-BREAK SPACE ,插入为一些文本编辑器在文件开头的字节顺序标记