Ruby的start_with?方法不一致性问题

3
请告诉我为什么第一次使用start_with返回false。 enter image description here 谢谢!

我刚刚运行了5次,结果还是一样的。 - user3903214
7
请把你的代码粘贴到问题中,而不是截图中。也许其中一个字符只是看起来像 #,但实际上是另一个 UTF8 字符。我会为你翻译这段话并尽量保持原意,同时使其更容易理解。 - spickermann
代码本身使用了一个字符串变量,所以我认为这种方式并不有帮助。而且,我非常确定它是一个数字符号。 - user3903214
1
根据@Jesse的评论,我的意思是让您在代码中有问题的字符串前面插入“str =”。我给您的内容将告诉我们字符串中前10个Unicode字符是什么。 - Cary Swoveland
@CarySwoveland 我得到了这个 ["", "#", "h", "o", "w", " ", "t", "o", " ", "d"] - user3903214
显示剩余8条评论
1个回答

4

你的字符串可能包含一个隐藏的Unicode字符。

如果是这样,那么字符串以该字符开头,而不是#,这就是为什么你得到了false

要在Ruby中查看它,请取出你运行 start_with? 的字符串,然后运行.unpack('C*')。这将返回一个数字数组,介于0255之间,表示字符串中每个字节的整数值。常规可打印ASCII字符只能到126。任何比这更高的数字都将提示您的字符串中有一个非打印字符隐藏在其中。

更新

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


我明白了。我该如何解释这个?[-17,-69,-65,35,104,111,119,32,116,111,32,100,111,119,110,108,111,97,100,32,109,101,109,116,101,115,116,32,112,108,117,115,32,55,13,10] - user3903214
您可以以 r:bom|utf-8 模式打开文件以去除 BOM。 - Patrick Oscity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接