Почему некоторые строки выглядят одинаково, но считаются не идентичными при проверке на эквивалентность строк? - PullRequest
0 голосов
/ 30 марта 2019

В настоящее время я пытаюсь решить вопрос из моего задания, в котором спрашивается, почему похожие строки выглядят не идентичными.

Вопрос сформулирован ниже:

В коде компьютерной программы объявлены две строковые переменные. Когда их соответствующие значения выводятся программой на экран компьютера, они отображаются в виде строки «ĝ». Однако программа возвращает false, когда обе переменные проверяются на их эквивалентность строк (т.е. false означает, что обе строки считаются не идентичными).

Что может быть наиболее вероятной причиной этих, казалось бы, противоречивых результатов? Предположим, что кодировка UTF-8 используется компьютерной программой.

Вопрос предполагает обоснование того, почему произошел такой противоречивый результат и как работает кодировка UTF-8 в этом сценарии

Моя текущая ставка заключается в том, что есть еще один символ, который похож на «ĝ», но имеет другое представление в юникоде, но я также не совсем уверен в этом.

1 Ответ

3 голосов
/ 30 марта 2019

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')
ĝ ĝ

К вашему сведению, в кодировке UTF-8, это будет шестнадцатеричные байты C4 9D против 67 CC 82.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...