有没有一个Unicode字符看起来像ASCII字符(但不相等)?

4
我想写一个面试前问题(针对Java,但这不重要),如果你查看它和复制粘贴并运行它的答案是不同的,这样我们就可以检查人们是否真正手动解决了问题
为此,我正在尝试找到一个Unicode字符,在屏幕上看起来与ASCII字符相同(因此在我的问题的某个地方,我可以有两个具有相同名称但具有Integer / int参数的方法)。
我知道这可能是破坏性的,但我希望它能提供额外的指标来验证其他答案。 注意:我尝试过土耳其字母“i”-它似乎是ASCII-有Unicode版本吗? 编辑/注:看起来我的意图被误解了...这些问题是打算手动完成的,而不是通过编译器完成的。如果他们复制文本并编译,则绕过了问题,这旨在使他们陷入困境(或更简单地给出错误答案)。那些两者都做的人要么会弄清楚,要么会带着困惑来参加真正的面试,我们可以帮助他们解决。 最后注意::(看起来这似乎不可能-大多数编辑器(在Windows上)将尝试以cp1252保存(不知何故,我的1个文件保存为UTF-8),在这种情况下,我认为没有任何字符能够正常工作而不提示某种保存错误。

3
这不就像请候选人调试你用空白符编写的程序吗?必须有一种更深入且不那么恼人的方式来提取您寻求的认知能力。 - msw
2
那些能够从你的死亡陷阱中脱颖而出的人应该得到密码学工作或追求完美主义的奖项,而不是编程工作 :P - Razor Storm
2
我认为OP的目标不是要欺骗人们,而是确定谁思考了代码,谁只是去运行它。被“欺骗”是正确的答案 - 这意味着你没有作弊。而且,谁会对这样一个诚实的问题投反对票呢? - Borealid
9
实际上,我越想越觉得这个主意很糟糕,如果你自己对ASCII和ISO-8859-9的区别模糊不清,那么给候选人一个类似的问题就更加不可取了。 - msw
4
“Looks like” 的外观取决于字体,而不是 Unicode。Unicode 可以告诉你有哪些编码点,并提供一些样本字形,但它并没有标准字体。西里尔字母中的“C”(发音为“S”)应该与 ASCII 中的“C”类似,但它们是否完全相同取决于具体的字体渲染。 - David Thornley
显示剩余3条评论
6个回答

4
您可以使用相同的感觉,但稍微简单一些的案例来做些事情:
System.out.println(100l);
System.out.println(1001);

根据所使用的字体,这两个语句看起来非常相似。 (如果您使用的字体是这种情况,则第一个数字为100L。)


如此相似,Visual Studio甚至会警告您不要这样做。 - Matt Greer
@Matt:确实。我考虑过记录一个功能请求,让它由你使用的字体来确定。我喜欢使用编译器开关来指定源字体的想法 :) - Jon Skeet
嗯,还不错,但我认为那个会太难隐藏了——它最终会出现在互联网和编辑器中……然而,它不会有字符编码的问题(当我第一次在命令行中运行时,就遇到了编译错误——需要指定编码)。 - Stephen

4

有很多可能性-这里只是我在Windows字符映射中发现的一些。但要注意,不是所有的字体都有这些字符,所以你的候选人可能看不到你想要表达的内容。

ǃ U+01C3: Latin Letter Retroflex Click
Κ U+039A: Greek Capital Letter KappaU+201A: Single Low-9 Quotation MarkU+2032: Prime

2
尝试使用像'a'或's'这样的西里尔字符。请查看:http://jrgraphix.net/research/unicode_blocks.php?block=8 顺便说一句,这是个好主意,但我不会使用方法重载的答案。我会使用一个switch-case迭代字符串。这样就没有提示有错误的问题,而且你可以轻松地挑选出真正精通技术的候选人。

没有,我不想让谷歌搜索到这段代码。也许在这轮面试之后我会公开它。 - Stephen

2
n-dash(短横线)或m-dash(长横线)- 看起来类似于减号。

2
Unicode联盟有一个专门的页面,称为Confusables:http://unicode.org/cldr/utility/confusables.jsp。该页面显示有许多Unicode字符与ASCII字符相似:
  • 类似于I: І ﺍ ﺎ ℐ ℑ Ⲓ ℓ Ɩ Ι ∣ ا I 1 ׀ ǀ Ӏ ᛁ I ߊ l ⵏ ו ן Ⅰ ١ │ l ۱ ꓲ | ⅼ ⏽

  • 类似于5: 5 Ƽ

  • 类似于K: K Ⲕ ᛕ ꓗ Κ К Ꮶ K

  • 类似于:: ः ઃ ܃ ᠃ ׃ ܄ ։ ᠉ ꞉ ᛬ ︰ ː ∶ ˸ : : ⁚ ꓽ

视觉相似度的确切程度将取决于您使用的字体,但在大多数字体中,至少一些字形看起来与ASCII字符相同。

1

我已经找到了一种适用于UTF-8和cp1252编码的解决方案(以便它将通过大多数(全部?)文本编辑器):不间断空格!

在cp1252中的位置160(00A0,10100000)注册,并且显然是UTF-8(维基百科将其注释为“多字节序列的第二、第三或第四个字节范围内”),它提供了一个字符,可以“正常工作”

注意:当从文本文件/ Skype复制到代码编辑器时,已测试此方法可在Windows上运行。Wordpress网页效果不佳(但它可能已经更改了字符)。值得庆幸的是,我们的组织没有采取“问题”预面试策略,因此我尚未在网页上对此进行确定性测试。


1
一个孤立的0xA0字节不是有效的UTF-8编码,当然,在UTF-8中,非断空格不会被表示为孤立的0xA0字节。 - R.. GitHub STOP HELPING ICE
这很好知道(+1)-我也是这么想的。然而,就这个问题而言,它似乎工作良好(代码编译并正常运行-或不正确)。 - Stephen
2
在UTF-8中,这将是0xC2 0xA0,参见http://www.fileformat.info/info/unicode/char/a0/index.htm。对于网页,您可能会使用“ ”代替,但无论如何,浏览器都可以将其转换为真正的空格。 - Mark Ransom

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