Osaako kukaan kertoa että tukeeko ncurses(w):n getn_wstr-funktio skandinaavisia merkkejä?
Alla pieni esimerkki:
#include <ncursesw/ncurses.h> #include <wchar.h> int main(int argc, char **argv) { wchar_t str[20]; initscr(); getn_wstr(&str[0], 10); endwin(); return 0; }
Käännän tämän seuraavasti:
gcc test.c -o test -lncursesw
Funktio getn_wstr tuntuu toimivan erinomaisesti muille kuin skandinaavisille merkeille. Jos erehtyy painamaan vaikkapa ö-kirjainta, näytölle ei tulostu mitään. Kaiken kukkuraksi tämän jälkeen näytölle ei tulostu enää mitään muitakaan merkkejä.
Sama ongelma tuntuu esiintyvän sekä Gnomen Terminal-ikkunassa että normaalissa framebuffer-konsolissa. Ympäristö on 64-bittinen Ubuntu 8.04 (kieli on asetettu englanniksi ja näppäinasettelu suomalaiseksi).
Mikäs on terminaalin merkistökoodaus?
Kiitoksia mielenkiinnosta, merkistö on UTF-8.
Tämä ongelma näytti ratkeavan sijoittamalla oheinen kutsu ennen initscr():ää:
setlocale(LC_ALL, "");
Siltikin aika mielenkiintoinen ominaisuus tuo jumiutuminen, joka siis tapahtuu ilman tuota setlocale()-kutsua. En myöskään päässyt täyteen varmuuteen siitä, miksi tuo setlocale()-kutsu on välttämätön.
Tuohon getn_wstr()-funktioon liittyy toinenkin mielenkiintoinen asia. Sillehän annetaan parametrina luettavien merkkien maksimimäärä. Esimerkiksi ctrl+d tuntuu olevan ihan sallittu yksittäinen merkki, joka kuitenkin esitetään näytöllä merkkiyhdistelmänä ^D. Nyt jos haluaa että luettavien merkkien maksimimäärä tarkoittaa myös näytöllä samaa määrää merkkejä, joutuu tuosta funktiosta todennäköisesti toteuttamaan oman versionsa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.