请告诉我为什么第一次使用start_with返回false。
谢谢!
你的字符串可能包含一个隐藏的Unicode字符。
如果是这样,那么字符串以该字符开头,而不是#
,这就是为什么你得到了false
。
要在Ruby中查看它,请取出你运行 start_with?
的字符串,然后运行.unpack('C*')
。这将返回一个数字数组,介于0
和255
之间,表示字符串中每个字节的整数值。常规可打印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]
- user3903214r:bom|utf-8
模式打开文件以去除 BOM。 - Patrick Oscity
#
,但实际上是另一个 UTF8 字符。我会为你翻译这段话并尽量保持原意,同时使其更容易理解。 - spickermann["", "#", "h", "o", "w", " ", "t", "o", " ", "d"]
- user3903214