Я работаю над скриптом, который отображает символы UTF-8 в качестве вывода. В моем терминале Gnome это выводит симпатичный кленовый лист (
решение1
Приложение, работающее в терминале, не имеет возможности узнать от терминала, как выглядят нарисованные терминалом глифы (или даже являются ли они символами-заменителями/заполнителями).
Одна вещь, приложениеможетнужно выяснить, поддерживает ли терминал UTF-8 вообще, и если поддерживает, поддерживает ли он символы переменной ширины. Метод следующий:
- Прочитайте позицию курсора, написав ESC
[
6
n
и ожидая ESC[
линия;
колR
- Запишите 2-байтовую последовательность
"\xc2\xa0"
. Если терминал поддерживает UTF-8, это один неразрывный пробел. Если терминал не поддерживает UTF-8, это что-то неизвестное, но, вероятно, занимающее 2 символьные позиции (вероятно,Â
за которым следует неразрывный пробел, на самом деле). - Снова прочитайте положение курсора и выясните, переместился ли курсор на одну позицию или на две позиции.
Если терминал поддерживает UTF-8, то вы можете узнать, поддерживает ли он переменную ширину символов, в основном используя тот же трюк. Считайте позицию курсора, напишите символ, который должен быть двойной ширины в моноширинных шрифтах, например, あ, затем снова считайте позицию курсора. Если терминал не поддерживает символы двойной ширины, курсор, вероятно, наивно переместился только на одну позицию.