Ruby 你从什么开始?不一致

Ruby 你从什么开始?不一致,ruby,Ruby,请告诉我第一次使用start_时如何返回false 谢谢 您的字符串可能包含隐藏的unicode字符 如果是这样,字符串将以该字符开头,而不是以#开头,这就是为什么会出现false 要在Ruby中查看它,请将正在运行的字符串start\u with?on改为运行.unpack('C*')。这将返回一个介于0和255之间的数字数组,表示字符串中每个字节的整数值。正常的可打印ASCII字符最多只能达到126。任何大于该值的数字都将提示字符串中隐藏了非打印字符 更新 在这个特殊的例子中,使用这个诊断

请告诉我第一次使用start_时如何返回false


谢谢

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

如果是这样,字符串将以该字符开头,而不是以
#
开头,这就是为什么会出现
false

要在Ruby中查看它,请将正在运行的字符串
start\u with?
on改为运行
.unpack('C*')
。这将返回一个介于
0
255
之间的数字数组,表示字符串中每个字节的整数值。正常的可打印ASCII字符最多只能达到
126
。任何大于该值的数字都将提示字符串中隐藏了非打印字符

更新


在这个特殊的例子中,使用这个诊断方法表明在字符串的开头确实有额外的字节。它们以
[239187191,…]
的形式出现在数组的开头,它的字符串等价物是
“\xEF\xBB\xBF”
,或者UTF-8码点零宽度不间断空间,它被一些文本编辑器作为字节顺序标记插入文件的开头。

我只运行了5次。同样,你也可以将你的代码粘贴到你的问题中,而不是屏幕截图中。也许其中一个字符看起来像一个
#
,但实际上是另一个uft8字符。我使用的是ruby 2.1.2P95。代码本身使用一个字符串变量,所以我认为这样做没有帮助。另外,我很确定这是一个数字符号。关于@Jesse的评论,我的意思是让你在你的代码中麻烦的字符串前面插入
str=
。我给你的将告诉我们字符串中的前10个Unicode字符是什么。我得到了这个。我如何解释这一点<代码>[-17、-69、-65、35、104、111、119、32、116、111、32、100、111、119、110、108、111、97、100、32、109、101、101、101、116、32、112、108、117、115、32、55、13、10]您可以在
r:bom | utf-8
模式下打开文件以剥离bom。