2013-12-23 2 views
1

Некоторые комбинации символов Юникода кажутся проблематичными. Я покажу вам, что я имею в виду, используя Notepad ++.Юникод-символы, испорченные после разрыва строки

  1. Создайте новый текстовый файл в Notepad ++ и измените кодировку на UTF-8 (спецификация не имеет значения).
  2. Скопируйте и вставьте следующие четыре стрелки: ↑ ↓ ↙↘. Это должно выглядеть отлично (см. Первое изображение ниже).
  3. Теперь вставьте новую строку после второй стрелки (Windows/Unix не имеет значения). Теперь первая строка все еще выглядит нормально, , но стрелки во второй строке заменяются полями-заполнителями (см. Второе изображение ниже).
  4. Сохранение и повторное открытие не имеет значения. Все еще коробки во второй строке. Удалите линию, и все снова выглядит отлично.

Эта проблема не только для Notepad ++. Другие программы также показывают мусор при загрузке текстового файла с помощью строки. Удивительно, но стандартный блокнот Windows отображает его просто отлично.

Это рабочий файл после того, как в шестнадцатеричном и один раз в Notepad ++:

E2 86 91 E2 86 93 E2 86 99 E2 86 98 

Works

Это сломанный файл. Обратите внимание, что все это отличается от добавленной строки (0D 0A).

E2 86 91 E2 86 93 0D 0A E2 86 99 E2 86 98 

Doesn't work

Кто-нибудь может поделиться некоторый свет на то, что здесь происходит?

Редактировать: Я пишу программу, которая создает выходные данные в текстовом формате. Я наткнулся на проблему, когда несколько текстовых редакторов не отображали вывод моей программы правильно, поэтому я сначала предположил, что в моей программе что-то не так. В ее нынешнем виде его выход просто прекрасен. Так что реальный вопрос:

Есть ли способ изменить второй (сломанный) пример, чтобы он отображался правильно в вашем типичном редакторе?

+0

Это интересно, но не по теме в StackOverflow. –

+0

Интересно, если я вставлю строку ↑ ↓ ↙↘ в конце второй строки (которую я вижу в виде двух маленьких ящиков с вопросительным знаком внутри), то первые два символа будут восстановлены, а строка будет выглядеть следующим образом: ↙↘ ↑ ↓ ↙ ↘. –

+0

Зависит от шрифта. С помощью, например, Courier New, коробки видны. С Consolas, коробки с вопросительными знаками. С помощью Calibri стрелки отображаются на OK. Таким образом, это, по-видимому, только ошибка рендеринга. –

ответ

1

Это проблема с шрифтом, которая вызывает некоторые ошибки или недостатки в текстовых редакторах. Можно действительно спросить, почему, например, Notepad ++ показывает «↙↘» вообще, когда он использует Courier New (который, по моему мнению, является его шрифтом по умолчанию). Этот шрифт (как и многие другие шрифты) вообще не содержит этих символов.

Глядя на образец в вопросе, вы можете видеть, что в «↑ ↓ ↙↘» первые два символа находятся в другом стиле от двух других. Причина в том, что они отображаются в двух разных шрифтах. (Я вижу их в Arial и DejaVu Sans. Ваш пробег может варьироваться в зависимости от шрифтов, установленных в вашей системе, и списка резервных шрифтов вашего браузера.)

Аналогичные вещи случаются, например. в Блокноте ++ и Блокноте. Когда используемый основной шрифт не содержит всех символов в тексте, программа использует некоторые резервные шрифты. Это может быть жестко связано с программным кодом или может быть установлено пользователем.

По какой-то причине в Notepad ++ механизм аварийного восстановления шрифта не работает в некоторых ситуациях.Это также происходит, если вы просто удаляете первые два символа или изначально вводите только «↙↘». По-видимому, то, что предшествует тем символам в одной строке, влияет на механизм выбора шрифтов. Возможно, вы захотите представить отчет об ошибке, но его можно классифицировать как функцию, а не ошибку. В конце концов, просить программу визуализации символов, которые не отображаются в шрифте, который была настроена для использования программой, может привести к ошибке общего назначения, а не просто сбою в некоторых случаях.

Решение состоит в том, что при использовании текстового редактора для просмотра данных редактор должен быть настроен на использование шрифта, содержащего все символы, появляющиеся в тексте. См. a list of fonts supporting “↙” (не исчерпывающий, но, вероятно, довольно хорошо охватывает шрифты, которые вы можете ожидать от обычного компьютера). В текстовом редакторе вы можете использовать моноширинный шрифт; в этом случае DejaVu Sans Mono может быть адекватным (если нет других относительно необычных специальных символов - шрифт имеет всего 3,310 глифов).

+0

Спасибо! Для меня это означает, что я должен придерживаться тех символов, которые на самом деле присутствуют в большинстве типичных шрифтов. Я не знал о резервной логике, которую вы указали, поэтому я предположил, что эти символы стрелки были частью моего шрифта (как я мог отчетливо их видеть) :-) –

Смежные вопросы