Отображение акцентированных символов с помощью pdcurses
#include <curses.h>
int main(){
initscr();
for(int i = -128; i < 128; ++i)
addch(i);
getch();
endwin();
}
Pdcurses отображает пробелы для символов от -128 до 0 (от 128 до 255). Есть ли способ, чтобы, по крайней мере, акцентированные символы, такие как é, отображались правильно? iostream
не имеет проблем
int main(){
for(int i = -128; i < 128; ++i)
std::cout << char(i);
}
Я скомпилировал pdcurses с широким набором символов и поддержкой UTF, хотя в любом случае это не проблема, верно? (Поскольку нужные символы содержатся в пределах 0-255, и с помощью add_wch
вместо этого не решил проблему в любом случае).
Windows 10 64-битная с g++ 6.1.0.
1 ответ
Я очень глупый. addch
принимает значение типа chtype
, Документация не слишком ясна о фактическом типе chtype
кроме того, что представляет символы. Смотря на curses.h
Я вижу, что chtype имеет тип unsigned long
, Так что негатив i
значения были приведены к unsigned
и, следовательно, обтекание, заставляя проклятия печатать символы, для которых им не назначено представление ASCII. Я также заблудился, потому что этот, казалось бы, похожий код без отрицательных значений дал тот же результат:
int main(){
initscr();
for(int i = 0; i < 255; ++i)
addch(char(i));
getch();
endwin();
}
Пока я не вспомнил, что char по умолчанию может быть подписан, и так char(i)
конечно оборачивается, чтобы стать отрицательным, прежде чем addch
называется.