为什么有些字符串看起来相同但在检查字符串等效性时却被视为不相同?

时间:2019-03-30 15:51:05

标签: unicode utf-8

我目前正在尝试解决我的作业中的一个问题,该问题询问为什么将相似的字符串检查为不相同。

问题如下:

在计算机程序的代码中,声明了两个字符串变量。当程序将它们各自的值打印到计算机屏幕上时,两者都显示为字符串“ĝ”。但是,当检查两个变量的字符串等效性时,程序将返回false(即false表示两个字符串均被视为不相同)。

这些看似矛盾的结果最有可能是什么原因?假设计算机程序使用了UTF-8编码。

该问题希望说明为什么会出现这种矛盾的结果以及在这种情况下UTF-8编码如何工作

我目前的赌注是,还有另一个看起来与“ĝ”相似的字符,但是具有不同的unicode表示形式,但是我也不完全确定。

1 个答案:

答案 0 :(得分:3)

Unicode具有组合字符,因此您可以:

U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX

或:

U+0067 LATIN SMALL LETTER G
U+0302 COMBINING CIRCUMFLEX ACCENT

在视觉上,这些将打印相同的内容(Python代码示例):

>>> print('\u011d \u0067\u0302')
ĝ ĝ

FYI,采用UTF-8编码,相对于C4 9D是十六进制的字节。{p>