是否有一个 unicode 字符看起来像一个 ascii 字符(但不相等)?

Posted

技术标签:

【中文标题】是否有一个 unicode 字符看起来像一个 ascii 字符(但不相等)?【英文标题】:Is there a unicode character that looks like an ascii one (but isn't equal)? 【发布时间】:2010-08-05 04:46:23 【问题描述】:

我想写一个面试前的问题(对于java,但这并不重要),如果你看它而不是复制粘贴它并运行它会有不同的答案这样我们就可以检查人们是否真的手动解决问题

为此,我试图找到一个 unicode 字符,它在屏幕上看起来与 ascii 字符相同(因此在我的问题的某个时刻,我可以有两个具有相同名称但具有 Integer/ 的方法int 参数)

我知道它可能具有颠覆性,但我希望它能提供一个额外的指标来验证其他答案。

注意:我尝试过土耳其语“i”——它似乎是 ascii——有 unicode 版本吗?

编辑/注意: 看起来我的意图被误解了......这些问题旨在手动完成,而不是由编译器完成。如果他们正在复制文本并进行编译,那么他们就是在绕过问题,这是为了让他们绊倒(或者更简单地给出错误的答案)。两者兼得的人要么弄明白,要么带着困惑来到真正的面试,我们可以帮助他们度过难关。

最后说明: :( 这看起来不太可能 - 大多数编辑器(在 Windows 上)将尝试保存在 cp1252 中(不知何故我的 1 文件保存为 UTF-8)在这种情况下,我认为没有任何字符可以在不提示某种保存错误的情况下工作

【问题讨论】:

这不是让候选人调试你用 Whitespace 编写的程序吗?必须有一种更具探索性和更少刺激性的方式来提取您所寻求的认知能力。 一个成功地超越了你的死亡陷阱的人应该得到一份密码学的工作,或者因为迂腐而不是编程的工作而获得奖励:P 我不认为 OP 的目标是欺骗人们。我认为这是确定谁通过代码思考,以及谁刚刚去运行它。被“欺骗”是正确的答案——这意味着你没有作弊。无论如何,谁会否决这样一个诚实的问题? 实际上,当您自己对 ASCII 和 ISO-8859-9 之间的区别感到模糊时,我想的越多,它似乎就给候选人一个基于此的问题。 “看起来”取决于字体,而不是 Unicode。 Unicode 会告诉您有某些代码点,并且有示例字形,但它没有标准字体。西里尔字母“C”(“S”音)看起来应该类似于 ASCII 字母“C”,但它们是否相同取决于单独的字体渲染。 【参考方案1】:

你可以用同样的感觉做一些事情,但稍微不那么晦涩:

System.out.println(100l);
System.out.println(1001);

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

【讨论】:

如此类似的Visual Studio甚至会警告你不要这样做。 @Matt:确实。我已经考虑记录一个功能请求,这取决于您使用的字体。我喜欢编译器开关来指定源字体的想法:) 嗯。很好,但我认为一个很难隐藏 - 它最终会出现在互联网和编辑器中......但是,它不会有字符编码问题(当我第一次尝试时遇到编译错误它在命令行 - 需要指定编码)【参考方案2】:

有很多可能性 - 这里只是我在 Windows 字符映射中发现的几个。请注意,并非所有字体都有这些字符,因此您的候选人可能看不到您的意图。

ǃ U+01C3: Latin Letter Retroflex Click
Κ U+039A: Greek Capital Letter Kappa
‚ U+201A: Single Low-9 Quotation Mark
′ U+2032: Prime

【讨论】:

【参考方案3】:

尝试使用西里尔字符,例如“a”或“s”。看一看:http://jrgraphix.net/research/unicode_blocks.php?block=8

顺便说一句,好主意,但我不会做一个方法重载的答案。我会使用一个 switch-case 迭代一个字符串。这样一来,就不会发现有什么问题,而且您可以轻松挑选出真正了解自己的东西的候选人。

【讨论】:

不,我没有——我不想通过谷歌搜索找到代码。也许我会在这一轮面试之后......【参考方案4】:

n-dash 或 m-dash - 看起来类似于减号。

【讨论】:

【参考方案5】:

Unicode Consortium 有一个专门介绍 Confusables 的页面:http://unicode.org/cldr/utility/confusables.jsp

这表明有很多 Unicode 字符看起来类似于 ASCII 字符:

类似于I:Ι?І??اا?ℐℑ?Ⲓ?ℓΙƖΙΙ??|ا我??1??????|?|Ӏᛁ??我| ⅼ ⏽ ?

类似于 5:? 5 ? ? ?Ƽ ? ?

类似于 K:? ? ? K ? ? ? ? ? Ⲕ ᛕ ꓗ Κ К ? ? ? ? Ꮶ ? K?> ? ? p

类似于 :: ः ઃ                                                                                                                                                                                                                                                                                   = ᠉ ꞉ ᛬ ︰ ː ∶ ˸ : : ⁚ ꓽ

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

【讨论】:

【参考方案6】:

我实际上发现了一些可以在 UTF-8 和 cp1252 编码中工作的东西(这样它就可以通过大多数(所有?)文本编辑器):不间断空间!

在 cp1252 中的位置 160 (00A0, 10100000) 注册,显然是 UTF-8(***在“多字节序列的第二、第三或第四字节”范围内指出它),它提供了一个字符,它将“只是工作”

注意:当从文本文件/skype 复制到代码编辑器中时,它已经过测试可以在 Windows 上运行。一个 Wordpress 网页的表现并不好(但它可能无论如何都改变了这个角色)。谢天谢地,我们的组织没有采用“问题”的面试前策略,所以我还没有在网页上明确测试过。

【讨论】:

单独的 0xA0 字节不是有效的 UTF-8,当然 UTF-8 中的不间断空格不表示为单独的 0xA0 字节。 很高兴知道 (+1) - 我也这么想。但是,就这个问题而言,它似乎运行良好(代码编译和运行正确 - 或错误) 在 UTF-8 中,这将是 0xC2 0xA0,请参阅 fileformat.info/info/unicode/char/a0/index.htm 对于网页,您可以使用   代替,但无论如何它都可以被浏览器转换为真实空间。

以上是关于是否有一个 unicode 字符看起来像一个 ascii 字符(但不相等)?的主要内容,如果未能解决你的问题,请参考以下文章

有没有看起来像“钥匙”图标的 Unicode 字形? [关闭]

Unicode 字符代表“全屏”?

Windows控制台对Unicode有什么限制?

最高的 Unicode 字符? [关闭]

如何正确逃生bash提示符Unicode字符

Windows 上的 Unicode 基础知识